diff options
Diffstat (limited to 'doc/sphinx/uml')
42 files changed, 2478 insertions, 0 deletions
diff --git a/doc/sphinx/uml/appendRequestedOptions.png b/doc/sphinx/uml/appendRequestedOptions.png Binary files differnew file mode 100644 index 0000000..8b217f8 --- /dev/null +++ b/doc/sphinx/uml/appendRequestedOptions.png diff --git a/doc/sphinx/uml/appendRequestedOptions.svg b/doc/sphinx/uml/appendRequestedOptions.svg new file mode 100644 index 0000000..93c17ff --- /dev/null +++ b/doc/sphinx/uml/appendRequestedOptions.svg @@ -0,0 +1,41 @@ +<?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="797px" preserveAspectRatio="none" style="width:444px;height:797px;" version="1.1" viewBox="0 0 444 797" width="444px" zoomAndPan="magnify"><defs><filter height="300%" id="fmj8a1z5wugx1" 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="420" x="12" y="27.4023">Append requested options algorithm (Kea 1.8.0)</text><rect fill="#FEFECE" filter="url(#fmj8a1z5wugx1)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="163" x="136" y="32.1992"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="143" x="146" y="53.8008">get configured option list</text><rect fill="#FEFECE" filter="url(#fmj8a1z5wugx1)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="272" x="81.5" y="86.332"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="252" x="91.5" y="107.9336">get parameter request list (PRL) from query</text><rect fill="#FEFECE" filter="url(#fmj8a1z5wugx1)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="242" x="96.5" y="184.4648"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="222" x="106.5" y="206.0664">get configured options in dhcp4 space</text><rect fill="#FEFECE" filter="url(#fmj8a1z5wugx1)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="192" x="121.5" y="282.5977"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="172" x="131.5" y="304.1992">push back option code to PRL</text><polygon fill="#FEFECE" filter="url(#fmj8a1z5wugx1)" points="148,238.5977,287,238.5977,299,250.5977,287,262.5977,148,262.5977,136,250.5977,148,238.5977" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="139" x="148" y="254.7549">for each persistent option</text><polygon fill="#FEFECE" filter="url(#fmj8a1z5wugx1)" points="108.5,140.4648,326.5,140.4648,338.5,152.4648,326.5,164.4648,108.5,164.4648,96.5,152.4648,108.5,140.4648" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="218" x="108.5" y="156.6221">for each item from configured option list</text><rect fill="#FEFECE" filter="url(#fmj8a1z5wugx1)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="242" x="96.5" y="517.208"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="222" x="106.5" y="538.8096">get configured options in dhcp4 space</text><rect fill="#FEFECE" filter="url(#fmj8a1z5wugx1)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="155" x="140" y="619.8184"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="135" x="150" y="641.4199">add option to response</text><polygon fill="#FEFECE" filter="url(#fmj8a1z5wugx1)" points="201.5,571.3408,233.5,571.3408,245.5,583.3408,233.5,595.3408,201.5,595.3408,189.5,583.3408,201.5,571.3408" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="22" x="221.5" y="605.9756">first</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="32" x="201.5" y="587.498">found</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="145" x="245.5" y="581.0205">not found or already found</text><polygon fill="#FEFECE" filter="url(#fmj8a1z5wugx1)" points="217.5,673.9512,229.5,685.9512,217.5,697.9512,205.5,685.9512,217.5,673.9512" style="stroke: #A80036; stroke-width: 1.5;"/><polygon fill="#FEFECE" filter="url(#fmj8a1z5wugx1)" points="108.5,473.208,326.5,473.208,338.5,485.208,326.5,497.208,108.5,497.208,96.5,485.208,108.5,473.208" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="218" x="108.5" y="489.3652">for each item from configured option list</text><polygon fill="#FEFECE" filter="url(#fmj8a1z5wugx1)" points="141,424.7305,294,424.7305,306,436.7305,294,448.7305,141,448.7305,129,436.7305,141,424.7305" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="221.5" y="459.3652">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="153" x="141" y="440.8877">option is not set in response</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="306" y="434.4102">no</text><polygon fill="#FEFECE" filter="url(#fmj8a1z5wugx1)" points="217.5,739.9512,229.5,751.9512,217.5,763.9512,205.5,751.9512,217.5,739.9512" style="stroke: #A80036; stroke-width: 1.5;"/><polygon fill="#FEFECE" filter="url(#fmj8a1z5wugx1)" points="163.5,380.7305,271.5,380.7305,283.5,392.7305,271.5,404.7305,163.5,404.7305,151.5,392.7305,163.5,380.7305" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="108" x="163.5" y="396.8877">for each code in PRL</text><ellipse cx="59.5" cy="435.7305" fill="#FFFFFF" filter="url(#fmj8a1z5wugx1)" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="59.5" cy="435.7305" fill="#000000" rx="6" ry="6" style="stroke: #7F7F7F; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="217.5" x2="217.5" y1="66.332" y2="86.332"/><polygon fill="#A80036" points="213.5,76.332,217.5,86.332,221.5,76.332,217.5,80.332" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="217.5" x2="217.5" y1="262.5977" y2="282.5977"/><polygon fill="#A80036" points="213.5,272.5977,217.5,282.5977,221.5,272.5977,217.5,276.5977" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="217.5" x2="217.5" y1="316.7305" y2="326.7305"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="217.5" x2="325.5" y1="326.7305" y2="326.7305"/><polygon fill="#A80036" points="321.5,297.6641,325.5,287.6641,329.5,297.6641,325.5,293.6641" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="325.5" x2="325.5" y1="250.5977" y2="326.7305"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="325.5" x2="299" y1="250.5977" y2="250.5977"/><polygon fill="#A80036" points="309,246.5977,299,250.5977,309,254.5977,305,250.5977" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="136" x2="109.5" y1="250.5977" y2="250.5977"/><polygon fill="#A80036" points="105.5,283.6641,109.5,293.6641,113.5,283.6641,109.5,287.6641" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="109.5" x2="109.5" y1="250.5977" y2="338.7305"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="109.5" x2="350.5" y1="338.7305" y2="338.7305"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="350.5" x2="350.5" y1="152.4648" y2="338.7305"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="350.5" x2="338.5" y1="152.4648" y2="152.4648"/><polygon fill="#A80036" points="348.5,148.4648,338.5,152.4648,348.5,156.4648,344.5,152.4648" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="217.5" x2="217.5" y1="218.5977" y2="238.5977"/><polygon fill="#A80036" points="213.5,228.5977,217.5,238.5977,221.5,228.5977,217.5,232.5977" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="217.5" x2="217.5" y1="164.4648" y2="184.4648"/><polygon fill="#A80036" points="213.5,174.4648,217.5,184.4648,221.5,174.4648,217.5,178.4648" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="96.5" x2="84.5" y1="152.4648" y2="152.4648"/><polygon fill="#A80036" points="80.5,241.0977,84.5,251.0977,88.5,241.0977,84.5,245.0977" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="84.5" x2="84.5" y1="152.4648" y2="360.7305"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="84.5" x2="217.5" y1="360.7305" y2="360.7305"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="217.5" x2="217.5" y1="360.7305" y2="380.7305"/><polygon fill="#A80036" points="213.5,370.7305,217.5,380.7305,221.5,370.7305,217.5,374.7305" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="217.5" x2="217.5" y1="120.4648" y2="140.4648"/><polygon fill="#A80036" points="213.5,130.4648,217.5,140.4648,221.5,130.4648,217.5,134.4648" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="217.5" x2="217.5" y1="595.3408" y2="619.8184"/><polygon fill="#A80036" points="213.5,609.8184,217.5,619.8184,221.5,609.8184,217.5,613.8184" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="245.5" x2="305" y1="583.3408" y2="583.3408"/><polygon fill="#A80036" points="301,626.8848,305,636.8848,309,626.8848,305,630.8848" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="305" x2="305" y1="583.3408" y2="685.9512"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="305" x2="229.5" y1="685.9512" y2="685.9512"/><polygon fill="#A80036" points="239.5,681.9512,229.5,685.9512,239.5,689.9512,235.5,685.9512" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="217.5" x2="217.5" y1="653.9512" y2="673.9512"/><polygon fill="#A80036" points="213.5,663.9512,217.5,673.9512,221.5,663.9512,217.5,667.9512" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="217.5" x2="217.5" y1="551.3408" y2="571.3408"/><polygon fill="#A80036" points="213.5,561.3408,217.5,571.3408,221.5,561.3408,217.5,565.3408" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="217.5" x2="217.5" y1="497.208" y2="517.208"/><polygon fill="#A80036" points="213.5,507.208,217.5,517.208,221.5,507.208,217.5,511.208" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="217.5" x2="217.5" y1="697.9512" y2="707.9512"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="217.5" x2="350.5" y1="707.9512" y2="707.9512"/><polygon fill="#A80036" points="346.5,600.3184,350.5,590.3184,354.5,600.3184,350.5,596.3184" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="350.5" x2="350.5" y1="485.208" y2="707.9512"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="350.5" x2="338.5" y1="485.208" y2="485.208"/><polygon fill="#A80036" points="348.5,481.208,338.5,485.208,348.5,489.208,344.5,485.208" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="96.5" x2="84.5" y1="485.208" y2="485.208"/><polygon fill="#A80036" points="80.5,586.3184,84.5,596.3184,88.5,586.3184,84.5,590.3184" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="84.5" x2="84.5" y1="485.208" y2="719.9512"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="84.5" x2="217.5" y1="719.9512" y2="719.9512"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="217.5" x2="217.5" y1="719.9512" y2="739.9512"/><polygon fill="#A80036" points="213.5,729.9512,217.5,739.9512,221.5,729.9512,217.5,733.9512" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="217.5" x2="217.5" y1="448.7305" y2="473.208"/><polygon fill="#A80036" points="213.5,463.208,217.5,473.208,221.5,463.208,217.5,467.208" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="306" x2="360.5" y1="436.7305" y2="436.7305"/><polygon fill="#A80036" points="356.5,580.3184,360.5,590.3184,364.5,580.3184,360.5,584.3184" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="360.5" x2="360.5" y1="436.7305" y2="751.9512"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="360.5" x2="229.5" y1="751.9512" y2="751.9512"/><polygon fill="#A80036" points="239.5,747.9512,229.5,751.9512,239.5,755.9512,235.5,751.9512" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="217.5" x2="217.5" y1="404.7305" y2="424.7305"/><polygon fill="#A80036" points="213.5,414.7305,217.5,424.7305,221.5,414.7305,217.5,418.7305" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="217.5" x2="217.5" y1="763.9512" y2="773.9512"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="217.5" x2="384.5" y1="773.9512" y2="773.9512"/><polygon fill="#A80036" points="380.5,588.3184,384.5,578.3184,388.5,588.3184,384.5,584.3184" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="384.5" x2="384.5" y1="392.7305" y2="773.9512"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="384.5" x2="283.5" y1="392.7305" y2="392.7305"/><polygon fill="#A80036" points="293.5,388.7305,283.5,392.7305,293.5,396.7305,289.5,392.7305" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="151.5" x2="59.5" y1="392.7305" y2="392.7305"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="59.5" x2="59.5" y1="392.7305" y2="424.7305"/><polygon fill="#A80036" points="55.5,414.7305,59.5,424.7305,63.5,414.7305,59.5,418.7305" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[e3e9358e4d54eb346c856f31e4656dc6] +@startuml + +Title Append requested options algorithm (Kea 1.8.0) + +:get configured option list; + +:get parameter request list (PRL) from query; + +while (for each item from configured option list) + :get configured options in dhcp4 space; + while (for each persistent option) + :push back option code to PRL; + endwhile +endwhile + +while (for each code in PRL) + if (option is not set in response) then (yes) + while (for each item from configured option list) + :get configured options in dhcp4 space; + if (found) then (first) + :add option to response; + else (not found or already found) + endif + endwhile + else (no) + endif +endwhile +->done; +stop + +@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/sphinx/uml/appendRequestedOptions.uml b/doc/sphinx/uml/appendRequestedOptions.uml new file mode 100644 index 0000000..80a21d9 --- /dev/null +++ b/doc/sphinx/uml/appendRequestedOptions.uml @@ -0,0 +1,31 @@ +@startuml + +Title Append requested options algorithm (Kea 1.8.0) + +:get configured option list; + +:get parameter request list (PRL) from query; + +while (for each item from configured option list) + :get configured options in dhcp4 space; + while (for each persistent option) + :push back option code to PRL; + endwhile +endwhile + +while (for each code in PRL) + if (option is not set in response) then (yes) + while (for each item from configured option list) + :get configured options in dhcp4 space; + if (found) then (first) + :add option to response; + else (not found or already found) + endif + endwhile + else (no) + endif +endwhile +->done; +stop + +@enduml diff --git a/doc/sphinx/uml/appendRequestedVendorOptions.png b/doc/sphinx/uml/appendRequestedVendorOptions.png Binary files differnew file mode 100644 index 0000000..c00fcce --- /dev/null +++ b/doc/sphinx/uml/appendRequestedVendorOptions.png diff --git a/doc/sphinx/uml/appendRequestedVendorOptions.svg b/doc/sphinx/uml/appendRequestedVendorOptions.svg new file mode 100644 index 0000000..2fe289a --- /dev/null +++ b/doc/sphinx/uml/appendRequestedVendorOptions.svg @@ -0,0 +1,63 @@ +<?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="1590px" preserveAspectRatio="none" style="width:509px;height:1590px;" version="1.1" viewBox="0 0 509 1590" width="509px" zoomAndPan="magnify"><defs><filter height="300%" id="f1fxs94y917cvd" 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="485" x="12" y="27.4023">Append vendor requested options algorithm (Kea 1.8.0)</text><rect fill="#FEFECE" filter="url(#f1fxs94y917cvd)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="237" x="138.75" y="32.1992"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="217" x="148.75" y="53.8008">get vendor id from query vivso option</text><rect fill="#FEFECE" filter="url(#f1fxs94y917cvd)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="257" x="128.75" y="86.332"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="237" x="138.75" y="107.9336">get vendor id from response vivso option</text><rect fill="#FEFECE" filter="url(#f1fxs94y917cvd)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="55" x="229.75" y="188.9424"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="35" x="239.75" y="210.5439">return</text><ellipse cx="257.25" cy="262.5088" fill="#FFFFFF" filter="url(#f1fxs94y917cvd)" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="257.25" cy="262.5088" fill="#000000" rx="6" ry="6" style="stroke: #7F7F7F; stroke-width: 1.0;"/><polygon fill="#FEFECE" filter="url(#f1fxs94y917cvd)" points="231.75,140.4648,282.75,140.4648,294.75,152.4648,282.75,164.4648,231.75,164.4648,219.75,152.4648,231.75,140.4648" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="261.25" y="175.0996">no</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="51" x="231.75" y="156.6221">vendor id</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="294.75" y="150.1445">yes</text><rect fill="#FEFECE" filter="url(#f1fxs94y917cvd)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="163" x="175.75" y="315.5088"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="143" x="185.75" y="337.1104">get configured option list</text><rect fill="#FEFECE" filter="url(#f1fxs94y917cvd)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="381" x="66.75" y="369.6416"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="361" x="76.75" y="391.2432">get option request list (ORO) from query DOCSIS vendor option</text><rect fill="#FEFECE" filter="url(#f1fxs94y917cvd)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="260" x="127.25" y="467.7744"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="240" x="137.25" y="489.376">get configured options in vendor id space</text><rect fill="#FEFECE" filter="url(#f1fxs94y917cvd)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="197" x="158.75" y="565.9072"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="177" x="168.75" y="587.5088">push back option code to ORO</text><polygon fill="#FEFECE" filter="url(#f1fxs94y917cvd)" points="187.75,521.9072,326.75,521.9072,338.75,533.9072,326.75,545.9072,187.75,545.9072,175.75,533.9072,187.75,521.9072" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="139" x="187.75" y="538.0645">for each persistent option</text><polygon fill="#FEFECE" filter="url(#f1fxs94y917cvd)" points="148.25,423.7744,366.25,423.7744,378.25,435.7744,366.25,447.7744,148.25,447.7744,136.25,435.7744,148.25,423.7744" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="218" x="148.25" y="439.9316">for each item from configured option list</text><rect fill="#FEFECE" filter="url(#f1fxs94y917cvd)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="207" x="153.75" y="712.5176"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="187" x="163.75" y="734.1191">create vivso option for vendor id</text><polygon fill="#FEFECE" filter="url(#f1fxs94y917cvd)" points="197.75,664.04,316.75,664.04,328.75,676.04,316.75,688.04,197.75,688.04,185.75,676.04,197.75,664.04" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="261.25" y="698.6748">no</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="119" x="197.75" y="680.1973">response vivso option</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="328.75" y="673.7197">yes</text><polygon fill="#FEFECE" filter="url(#f1fxs94y917cvd)" points="257.25,766.6504,269.25,778.6504,257.25,790.6504,245.25,778.6504,257.25,766.6504" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#FEFECE" filter="url(#f1fxs94y917cvd)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="103" x="205.75" y="810.6504"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="83" x="215.75" y="832.252">added = false</text><rect fill="#FEFECE" filter="url(#f1fxs94y917cvd)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="260" x="127.25" y="1001.2607"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="240" x="137.25" y="1022.8623">get configured options in vendor id space</text><rect fill="#FEFECE" filter="url(#f1fxs94y917cvd)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="198" x="158.25" y="1103.8711"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="178" x="168.25" y="1125.4727">add sub-option to vivso option</text><rect fill="#FEFECE" filter="url(#f1fxs94y917cvd)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="99" x="207.75" y="1173.0039"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="79" x="217.75" y="1194.6055">added = true</text><polygon fill="#FEFECE" filter="url(#f1fxs94y917cvd)" points="241.25,1055.3936,273.25,1055.3936,285.25,1067.3936,273.25,1079.3936,241.25,1079.3936,229.25,1067.3936,241.25,1055.3936" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="22" x="261.25" y="1090.0283">first</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="32" x="241.25" y="1071.5508">found</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="145" x="285.25" y="1065.0732">not found or already found</text><polygon fill="#FEFECE" filter="url(#f1fxs94y917cvd)" points="257.25,1227.1367,269.25,1239.1367,257.25,1251.1367,245.25,1239.1367,257.25,1227.1367" style="stroke: #A80036; stroke-width: 1.5;"/><polygon fill="#FEFECE" filter="url(#f1fxs94y917cvd)" points="148.25,957.2607,366.25,957.2607,378.25,969.2607,366.25,981.2607,148.25,981.2607,136.25,969.2607,148.25,957.2607" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="218" x="148.25" y="973.418">for each item from configured option list</text><polygon fill="#FEFECE" filter="url(#f1fxs94y917cvd)" points="159.75,908.7832,354.75,908.7832,366.75,920.7832,354.75,932.7832,159.75,932.7832,147.75,920.7832,159.75,908.7832" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="261.25" y="943.418">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="195" x="159.75" y="924.9404">sub-option is not set in vivso option</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="366.75" y="918.4629">no</text><polygon fill="#FEFECE" filter="url(#f1fxs94y917cvd)" points="257.25,1293.1367,269.25,1305.1367,257.25,1317.1367,245.25,1305.1367,257.25,1293.1367" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#FEFECE" filter="url(#f1fxs94y917cvd)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="186" x="164.25" y="1434.0918"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="166" x="174.25" y="1455.6934">add vivso option in response</text><polygon fill="#FEFECE" filter="url(#f1fxs94y917cvd)" points="191.25,1385.6143,323.25,1385.6143,335.25,1397.6143,323.25,1409.6143,191.25,1409.6143,179.25,1397.6143,191.25,1385.6143" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="261.25" y="1420.249">no</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="132" x="191.25" y="1401.7715">vivso option in response</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="335.25" y="1395.2939">yes</text><polygon fill="#FEFECE" filter="url(#f1fxs94y917cvd)" points="257.25,1488.2246,269.25,1500.2246,257.25,1512.2246,245.25,1500.2246,257.25,1488.2246" style="stroke: #A80036; stroke-width: 1.5;"/><polygon fill="#FEFECE" filter="url(#f1fxs94y917cvd)" points="240.75,1337.1367,273.75,1337.1367,285.75,1349.1367,273.75,1361.1367,240.75,1361.1367,228.75,1349.1367,240.75,1337.1367" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="261.25" y="1371.7715">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="33" x="240.75" y="1353.2939">added</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="285.75" y="1346.8164">no</text><polygon fill="#FEFECE" filter="url(#f1fxs94y917cvd)" points="257.25,1532.2246,269.25,1544.2246,257.25,1556.2246,245.25,1544.2246,257.25,1532.2246" style="stroke: #A80036; stroke-width: 1.5;"/><polygon fill="#FEFECE" filter="url(#f1fxs94y917cvd)" points="200.25,864.7832,314.25,864.7832,326.25,876.7832,314.25,888.7832,200.25,888.7832,188.25,876.7832,200.25,864.7832" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="114" x="200.25" y="880.9404">for each code in ORO</text><ellipse cx="70.25" cy="919.7832" fill="#FFFFFF" filter="url(#f1fxs94y917cvd)" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="70.25" cy="919.7832" fill="#000000" rx="6" ry="6" style="stroke: #7F7F7F; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="66.332" y2="86.332"/><polygon fill="#A80036" points="253.25,76.332,257.25,86.332,261.25,76.332,257.25,80.332" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="223.0752" y2="251.5088"/><polygon fill="#A80036" points="253.25,241.5088,257.25,251.5088,261.25,241.5088,257.25,245.5088" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="164.4648" y2="188.9424"/><polygon fill="#A80036" points="253.25,178.9424,257.25,188.9424,261.25,178.9424,257.25,182.9424" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="294.75" x2="306.75" y1="152.4648" y2="152.4648"/><polygon fill="#A80036" points="302.75,221.5088,306.75,231.5088,310.75,221.5088,306.75,225.5088" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="306.75" x2="306.75" y1="152.4648" y2="295.5088"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="306.75" x2="257.25" y1="295.5088" y2="295.5088"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="295.5088" y2="315.5088"/><polygon fill="#A80036" points="253.25,305.5088,257.25,315.5088,261.25,305.5088,257.25,309.5088" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="120.4648" y2="140.4648"/><polygon fill="#A80036" points="253.25,130.4648,257.25,140.4648,261.25,130.4648,257.25,134.4648" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="349.6416" y2="369.6416"/><polygon fill="#A80036" points="253.25,359.6416,257.25,369.6416,261.25,359.6416,257.25,363.6416" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="545.9072" y2="565.9072"/><polygon fill="#A80036" points="253.25,555.9072,257.25,565.9072,261.25,555.9072,257.25,559.9072" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="600.04" y2="610.04"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="367.75" y1="610.04" y2="610.04"/><polygon fill="#A80036" points="363.75,580.9736,367.75,570.9736,371.75,580.9736,367.75,576.9736" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="367.75" x2="367.75" y1="533.9072" y2="610.04"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="367.75" x2="338.75" y1="533.9072" y2="533.9072"/><polygon fill="#A80036" points="348.75,529.9072,338.75,533.9072,348.75,537.9072,344.75,533.9072" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="175.75" x2="146.75" y1="533.9072" y2="533.9072"/><polygon fill="#A80036" points="142.75,566.9736,146.75,576.9736,150.75,566.9736,146.75,570.9736" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="146.75" x2="146.75" y1="533.9072" y2="622.04"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="146.75" x2="399.25" y1="622.04" y2="622.04"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="399.25" x2="399.25" y1="435.7744" y2="622.04"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="399.25" x2="378.25" y1="435.7744" y2="435.7744"/><polygon fill="#A80036" points="388.25,431.7744,378.25,435.7744,388.25,439.7744,384.25,435.7744" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="501.9072" y2="521.9072"/><polygon fill="#A80036" points="253.25,511.9072,257.25,521.9072,261.25,511.9072,257.25,515.9072" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="447.7744" y2="467.7744"/><polygon fill="#A80036" points="253.25,457.7744,257.25,467.7744,261.25,457.7744,257.25,461.7744" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="136.25" x2="115.25" y1="435.7744" y2="435.7744"/><polygon fill="#A80036" points="111.25,524.4072,115.25,534.4072,119.25,524.4072,115.25,528.4072" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="115.25" x2="115.25" y1="435.7744" y2="644.04"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="115.25" x2="257.25" y1="644.04" y2="644.04"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="644.04" y2="664.04"/><polygon fill="#A80036" points="253.25,654.04,257.25,664.04,261.25,654.04,257.25,658.04" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="403.7744" y2="423.7744"/><polygon fill="#A80036" points="253.25,413.7744,257.25,423.7744,261.25,413.7744,257.25,417.7744" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="688.04" y2="712.5176"/><polygon fill="#A80036" points="253.25,702.5176,257.25,712.5176,261.25,702.5176,257.25,706.5176" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="328.75" x2="370.75" y1="676.04" y2="676.04"/><polygon fill="#A80036" points="366.75,719.584,370.75,729.584,374.75,719.584,370.75,723.584" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="370.75" x2="370.75" y1="676.04" y2="778.6504"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="370.75" x2="269.25" y1="778.6504" y2="778.6504"/><polygon fill="#A80036" points="279.25,774.6504,269.25,778.6504,279.25,782.6504,275.25,778.6504" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="746.6504" y2="766.6504"/><polygon fill="#A80036" points="253.25,756.6504,257.25,766.6504,261.25,756.6504,257.25,760.6504" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="790.6504" y2="810.6504"/><polygon fill="#A80036" points="253.25,800.6504,257.25,810.6504,261.25,800.6504,257.25,804.6504" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="1138.0039" y2="1173.0039"/><polygon fill="#A80036" points="253.25,1163.0039,257.25,1173.0039,261.25,1163.0039,257.25,1167.0039" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="1079.3936" y2="1103.8711"/><polygon fill="#A80036" points="253.25,1093.8711,257.25,1103.8711,261.25,1093.8711,257.25,1097.8711" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="366.25" y1="1067.3936" y2="1067.3936"/><polygon fill="#A80036" points="362.25,1145.5039,366.25,1155.5039,370.25,1145.5039,366.25,1149.5039" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="366.25" x2="366.25" y1="1067.3936" y2="1239.1367"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="366.25" x2="269.25" y1="1239.1367" y2="1239.1367"/><polygon fill="#A80036" points="279.25,1235.1367,269.25,1239.1367,279.25,1243.1367,275.25,1239.1367" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="1207.1367" y2="1227.1367"/><polygon fill="#A80036" points="253.25,1217.1367,257.25,1227.1367,261.25,1217.1367,257.25,1221.1367" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="1035.3936" y2="1055.3936"/><polygon fill="#A80036" points="253.25,1045.3936,257.25,1055.3936,261.25,1045.3936,257.25,1049.3936" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="981.2607" y2="1001.2607"/><polygon fill="#A80036" points="253.25,991.2607,257.25,1001.2607,261.25,991.2607,257.25,995.2607" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="1251.1367" y2="1261.1367"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="399.25" y1="1261.1367" y2="1261.1367"/><polygon fill="#A80036" points="395.25,1118.9375,399.25,1108.9375,403.25,1118.9375,399.25,1114.9375" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="399.25" x2="399.25" y1="969.2607" y2="1261.1367"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="399.25" x2="378.25" y1="969.2607" y2="969.2607"/><polygon fill="#A80036" points="388.25,965.2607,378.25,969.2607,388.25,973.2607,384.25,969.2607" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="136.25" x2="115.25" y1="969.2607" y2="969.2607"/><polygon fill="#A80036" points="111.25,1104.9375,115.25,1114.9375,119.25,1104.9375,115.25,1108.9375" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="115.25" x2="115.25" y1="969.2607" y2="1273.1367"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="115.25" x2="257.25" y1="1273.1367" y2="1273.1367"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="1273.1367" y2="1293.1367"/><polygon fill="#A80036" points="253.25,1283.1367,257.25,1293.1367,261.25,1283.1367,257.25,1287.1367" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="932.7832" y2="957.2607"/><polygon fill="#A80036" points="253.25,947.2607,257.25,957.2607,261.25,947.2607,257.25,951.2607" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="366.75" x2="409.25" y1="920.7832" y2="920.7832"/><polygon fill="#A80036" points="405.25,1098.9375,409.25,1108.9375,413.25,1098.9375,409.25,1102.9375" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="409.25" x2="409.25" y1="920.7832" y2="1305.1367"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="409.25" x2="269.25" y1="1305.1367" y2="1305.1367"/><polygon fill="#A80036" points="279.25,1301.1367,269.25,1305.1367,279.25,1309.1367,275.25,1305.1367" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="1409.6143" y2="1434.0918"/><polygon fill="#A80036" points="253.25,1424.0918,257.25,1434.0918,261.25,1424.0918,257.25,1428.0918" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="335.25" x2="360.25" y1="1397.6143" y2="1397.6143"/><polygon fill="#A80036" points="356.25,1441.1582,360.25,1451.1582,364.25,1441.1582,360.25,1445.1582" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="360.25" x2="360.25" y1="1397.6143" y2="1500.2246"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="360.25" x2="269.25" y1="1500.2246" y2="1500.2246"/><polygon fill="#A80036" points="279.25,1496.2246,269.25,1500.2246,279.25,1504.2246,275.25,1500.2246" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="1468.2246" y2="1488.2246"/><polygon fill="#A80036" points="253.25,1478.2246,257.25,1488.2246,261.25,1478.2246,257.25,1482.2246" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="1361.1367" y2="1385.6143"/><polygon fill="#A80036" points="253.25,1375.6143,257.25,1385.6143,261.25,1375.6143,257.25,1379.6143" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.75" x2="382.25" y1="1349.1367" y2="1349.1367"/><polygon fill="#A80036" points="378.25,1441.1582,382.25,1451.1582,386.25,1441.1582,382.25,1445.1582" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="382.25" x2="382.25" y1="1349.1367" y2="1544.2246"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="382.25" x2="269.25" y1="1544.2246" y2="1544.2246"/><polygon fill="#A80036" points="279.25,1540.2246,269.25,1544.2246,279.25,1548.2246,275.25,1544.2246" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="1512.2246" y2="1532.2246"/><polygon fill="#A80036" points="253.25,1522.2246,257.25,1532.2246,261.25,1522.2246,257.25,1526.2246" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="1317.1367" y2="1337.1367"/><polygon fill="#A80036" points="253.25,1327.1367,257.25,1337.1367,261.25,1327.1367,257.25,1331.1367" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="888.7832" y2="908.7832"/><polygon fill="#A80036" points="253.25,898.7832,257.25,908.7832,261.25,898.7832,257.25,902.7832" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="1556.2246" y2="1566.2246"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="433.25" y1="1566.2246" y2="1566.2246"/><polygon fill="#A80036" points="429.25,1233.9814,433.25,1223.9814,437.25,1233.9814,433.25,1229.9814" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="433.25" x2="433.25" y1="876.7832" y2="1566.2246"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="433.25" x2="326.25" y1="876.7832" y2="876.7832"/><polygon fill="#A80036" points="336.25,872.7832,326.25,876.7832,336.25,880.7832,332.25,876.7832" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="188.25" x2="70.25" y1="876.7832" y2="876.7832"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="70.25" x2="70.25" y1="876.7832" y2="908.7832"/><polygon fill="#A80036" points="66.25,898.7832,70.25,908.7832,74.25,898.7832,70.25,902.7832" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="257.25" y1="844.7832" y2="864.7832"/><polygon fill="#A80036" points="253.25,854.7832,257.25,864.7832,261.25,854.7832,257.25,858.7832" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[1634ff79370ec127c2dd3f2d0c122eb8] +@startuml + +Title Append vendor requested options algorithm (Kea 1.8.0) + +:get vendor id from query vivso option; +:get vendor id from response vivso option; +if (vendor id) then (no) + :return; + stop +else (yes) +endif + +:get configured option list; + +:get option request list (ORO) from query DOCSIS vendor option; + +while (for each item from configured option list) + :get configured options in vendor id space; + while (for each persistent option) + :push back option code to ORO; + endwhile +endwhile + +if (response vivso option) then (no) + :create vivso option for vendor id; +else (yes) +endif + +:added = false; +while (for each code in ORO) + if (sub-option is not set in vivso option) then (yes) + while (for each item from configured option list) + :get configured options in vendor id space; + if (found) then (first) + :add sub-option to vivso option; + :added = true; + else (not found or already found) + endif + endwhile + else (no) + endif + if (added) then (yes) + if (vivso option in response) then (no) + :add vivso option in response; + else (yes) + endif + else (no) + endif +endwhile +->done; +stop + +@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/sphinx/uml/appendRequestedVendorOptions.uml b/doc/sphinx/uml/appendRequestedVendorOptions.uml new file mode 100644 index 0000000..65d3d54 --- /dev/null +++ b/doc/sphinx/uml/appendRequestedVendorOptions.uml @@ -0,0 +1,53 @@ +@startuml + +Title Append vendor requested options algorithm (Kea 1.8.0) + +:get vendor id from query vivso option; +:get vendor id from response vivso option; +if (vendor id) then (no) + :return; + stop +else (yes) +endif + +:get configured option list; + +:get option request list (ORO) from query DOCSIS vendor option; + +while (for each item from configured option list) + :get configured options in vendor id space; + while (for each persistent option) + :push back option code to ORO; + endwhile +endwhile + +if (response vivso option) then (no) + :create vivso option for vendor id; +else (yes) +endif + +:added = false; +while (for each code in ORO) + if (sub-option is not set in vivso option) then (yes) + while (for each item from configured option list) + :get configured options in vendor id space; + if (found) then (first) + :add sub-option to vivso option; + :added = true; + else (not found or already found) + endif + endwhile + else (no) + endif + if (added) then (yes) + if (vivso option in response) then (no) + :add vivso option in response; + else (yes) + endif + else (no) + endif +endwhile +->done; +stop + +@enduml diff --git a/doc/sphinx/uml/assign-lease4.png b/doc/sphinx/uml/assign-lease4.png Binary files differnew file mode 100644 index 0000000..29e099b --- /dev/null +++ b/doc/sphinx/uml/assign-lease4.png diff --git a/doc/sphinx/uml/assign-lease4.svg b/doc/sphinx/uml/assign-lease4.svg new file mode 100644 index 0000000..0a51934 --- /dev/null +++ b/doc/sphinx/uml/assign-lease4.svg @@ -0,0 +1,113 @@ +<?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="f1hqawhmrx3191" 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="287" x="535" y="17.4023">DHCPv4 Assign Lease (Kea 1.8.0)</text><!--MD5=[96a966798826de6e056b38ba6b9482ca] +cluster init_reboot--><rect fill="#FFFFFF" filter="url(#f1hqawhmrx3191)" height="374.86" style="stroke: #000000; stroke-width: 1.5;" width="445" x="493" y="442.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="142" x="644.5" y="457.7344">INIT-REBOOT state</text><!--MD5=[71835f3367ed481a89f53801b2fdf617] +cluster allocated--><rect fill="#FFFFFF" filter="url(#f1hqawhmrx3191)" 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(#f1hqawhmrx3191)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="219" x="517.5" y="547.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="199" x="527.5" y="570.5944">Get existing lease by client id</text><!--MD5=[6b610307314e3774f091112845a2df2b] +entity by_hw_addr--><rect fill="#FEFECE" filter="url(#f1hqawhmrx3191)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="288" x="626" y="660.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="268" x="636" y="683.5944">Get existing lease by hardware address</text><!--MD5=[ef5397f1455a008291e257fb65cb453b] +entity authoritative--><rect fill="#FEFECE" filter="url(#f1hqawhmrx3191)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="134" x="528" y="757.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="114" x="538" y="780.5944">Get authoritative</text><!--MD5=[a54398e3d2c0f7657eea7ade058e1e7f] +entity ddns--><rect fill="#FEFECE" filter="url(#f1hqawhmrx3191)" 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(#f1hqawhmrx3191)" 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(#f1hqawhmrx3191)" 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(#f1hqawhmrx3191)" 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(#f1hqawhmrx3191)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="106" x="1046" y="125.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="86" x="1056" y="148.7344">Get server id</text><!--MD5=[ee598753b08e093ad1dc6a89dd6a274b] +entity hint--><rect fill="#FEFECE" filter="url(#f1hqawhmrx3191)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="74" x="849" y="222.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="54" x="859" y="245.7344">Get hint</text><!--MD5=[fdc0ebc2726a1e25611a217b1a9cdddd] +entity ident--><rect fill="#FEFECE" filter="url(#f1hqawhmrx3191)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="258" x="565" y="335.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="238" x="575" y="358.7344">Get hardware address and client id</text><!--MD5=[9b403e692b0a4a2d394ce21b0c8a8b18] +entity hostname--><rect fill="#FEFECE" filter="url(#f1hqawhmrx3191)" 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(#f1hqawhmrx3191)" 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(#f1hqawhmrx3191)" 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(#f1hqawhmrx3191)" 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(#f1hqawhmrx3191)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="87" x="599.5" y="1198.4192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="67" x="609.5" y="1221.9544">Send NAK</text><path d="M722,1203.9192 L722,1212.4192 L686.59,1216.4192 L722,1220.4192 L722,1229.2298 A0,0 0 0 0 722,1229.2298 L804,1229.2298 A0,0 0 0 0 804,1229.2298 L804,1213.9192 L794,1203.9192 L722,1203.9192 A0,0 0 0 0 722,1203.9192 " fill="#FBFB77" filter="url(#f1hqawhmrx3191)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M794,1203.9192 L794,1213.9192 L804,1213.9192 L794,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="728" y="1221.4876">exit point</text><!--MD5=[be0cad0b32609f2a377600c2fd818d08] +entity no_response--><rect fill="#FEFECE" filter="url(#f1hqawhmrx3191)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="106" x="1023" y="985.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="86" x="1033" y="1008.5944">No response</text><path d="M1164,990.5592 L1164,999.0592 L1129.16,1003.0592 L1164,1007.0592 L1164,1015.8698 A0,0 0 0 0 1164,1015.8698 L1246,1015.8698 A0,0 0 0 0 1246,1015.8698 L1246,1000.5592 L1236,990.5592 L1164,990.5592 A0,0 0 0 0 1164,990.5592 " fill="#FBFB77" filter="url(#f1hqawhmrx3191)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1236,990.5592 L1236,1000.5592 L1246,1000.5592 L1236,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="1170" y="1008.1276">exit point</text><!--MD5=[359b6ca0b36d81a4e33a25f71e3b7c61] +link subnet to server_id--><path d="M1232.48,64.3992 C1204.44,80.7492 1162.31,105.2992 1132.9,122.4392 " fill="none" id="subnet->server_id" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1128.3,125.1192,1138.0915,124.0576,1132.6235,122.6079,1134.0733,117.1399,1128.3,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,1186.7792 768.46,1163.0292 705,1182.4192 C694.58,1185.5992 683.88,1190.5892 674.36,1195.7292 " fill="none" id="subnet->nak" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="669.79,1198.2492,679.6021,1197.3996,674.1668,1195.8319,675.7345,1190.3966,669.79,1198.2492" 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="M1060.43,161.3992 C1022.99,178.0992 966.32,203.3692 927.82,220.5492 " fill="none" id="server_id->hint" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="923.21,222.5992,933.0589,222.5935,927.7779,220.5659,929.8055,215.2849,923.21,222.5992" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[34fbc802059013c2537c0989625530bb] +link hint to ident--><path d="M848.75,241.0892 C774.38,241.7392 611.66,247.8692 577,288.1992 C559.81,308.1992 581.08,323.0792 609.99,333.4192 " fill="none" id="hint->ident" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="615.08,335.1692,607.8731,328.4565,610.3525,333.541,605.268,336.0204,615.08,335.1692" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="186" x="578" y="301.7676">use requested address option</text><!--MD5=[34fbc802059013c2537c0989625530bb] +link hint to ident--><path d="M856.42,258.2992 C821.75,278.3392 764.41,311.4992 727.95,332.5692 " fill="none" id="hint->ident-1" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="723.61,335.0792,733.4041,334.0418,727.9397,332.5785,729.403,327.1142,723.61,335.0792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="114" x="802" y="301.7676">use client address</text><!--MD5=[34fbc802059013c2537c0989625530bb] +link hint to ident--><path d="M908.07,258.3492 C922.64,271.7392 937.02,290.4892 925,305.1992 C911.63,321.5592 871.46,332.3692 828.28,339.4492 " fill="none" id="hint->ident-2" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="823.28,340.2492,832.7964,342.7867,828.218,339.4643,831.5404,334.8859,823.28,340.2492" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="45" x="930" y="301.7676">no hint</text><!--MD5=[65f067d78ef63afdf91771d9a656ad03] +link ident to init_reboot--><path d="M694,371.5692 C694,387.3142 694,411.0567 694,431.1092 C694,433.6158 694,436.0647 694,438.4331 C694,439.6173 694,440.7814 694,441.9225 " fill="none" id="ident->init_reboot" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="694,441.9225,698,432.9225,694,436.9225,690,432.9225,694,441.9225" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="220" x="695" y="414.7676">requested address and no server id</text><!--MD5=[14830c65b2a034d88d53d1ea466689d7] +link ident to hostname--><path d="M571.53,371.2492 C471.99,388.6592 348,420.0792 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->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="M693.95,470.1292 C692.56,472.0792 661.57,515.5492 642.25,542.6592 " fill="none" id="init_reboot->by_client_id" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="639.25,546.8692,647.7294,541.8593,642.1508,542.7967,641.2134,537.218,639.25,546.8692" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="88" x="673" y="513.6276">has a client id</text><!--MD5=[e73d6babdacfd6f192eca91886274ed0] +link init_reboot to by_hw_addr--><path d="M694.16,470.0592 C697.44,470.0892 750.21,470.9692 770,500.0592 C802.04,547.1592 787.68,618.8592 777.31,654.8392 " fill="none" id="init_reboot->by_hw_addr" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="775.82,659.8792,782.2006,652.3767,777.2331,655.0831,774.5268,650.1156,775.82,659.8792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="71" x="790" y="570.1276">no client id</text><!--MD5=[0bee13a6f2540e80d374adb5c9fde696] +link by_client_id to authoritative--><path d="M612.69,583.0592 C598.68,600.9192 578.27,630.4692 570,660.0592 C561.14,691.7592 573.59,729.1292 583.87,752.2092 " fill="none" id="by_client_id->authoritative" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="586.03,756.9092,585.9217,747.061,583.9492,752.3628,578.6474,750.3903,586.03,756.9092" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="37" x="571" y="683.1276">found</text><!--MD5=[81a28d33e53a361ab0f9b1ac80511604] +link by_client_id to by_hw_addr--><path d="M622.24,583.2592 C619.47,597.2192 618.2,616.7092 628,630.0592 C636.84,642.0992 648.87,651.0992 662.21,657.8192 " fill="none" id="by_client_id->by_hw_addr" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="666.79,660.0092,660.4134,652.5033,662.2842,657.8419,656.9456,659.7126,666.79,660.0092" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="62" x="629" y="626.6276">not found</text><!--MD5=[996213fdf844dcf095df5ccc9b89cdbf] +link by_hw_addr to authoritative--><path d="M738.31,696.2592 C708.08,712.6692 662.6,737.3592 631.01,754.5092 " fill="none" id="by_hw_addr->authoritative" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="626.46,756.9792,636.2784,756.2057,630.8555,754.596,632.4652,749.173,626.46,756.9792" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[cc7ba6fbd1fdcf375abf61565bb8cbda] +link authoritative to no_response--><path d="M662.09,791.8592 C705.06,803.0892 761.47,819.8992 809,841.0592 C901.17,882.0792 1000.65,948.7092 1047.95,981.9092 " fill="none" id="authoritative->no_response" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1052.08,984.8292,1047.0166,976.3816,1047.9892,981.9542,1042.4166,982.9269,1052.08,984.8292" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="233" x="960" y="911.1276">not authoritative and no owned lease</text><!--MD5=[f287a43fa002547e84e3e2517c1b3af8] +link authoritative to nak--><path d="M662.08,792.5792 C716.07,810.3592 783,844.5992 783,905.0592 C783,905.0592 783,905.0592 783,1120.4192 C783,1133.0992 719.28,1171.9092 677.82,1195.8192 " fill="none" id="authoritative->nak" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="673.38,1198.3692,683.178,1197.37,677.7195,1195.8855,679.204,1190.4269,673.38,1198.3692" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="203" x="784" y="1008.1276">owned lease with hint mismatch</text><!--MD5=[f287a43fa002547e84e3e2517c1b3af8] +link authoritative to nak--><path d="M571.78,793.3292 C544.53,815.7792 503,857.7492 503,905.0592 C503,905.0592 503,905.0592 503,1120.4192 C503,1165.8592 554.13,1191.0792 594.59,1203.9092 " fill="none" id="authoritative->nak-1" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="599.47,1205.4192,592.043,1198.9509,594.6908,1203.9498,589.6919,1206.5976,599.47,1205.4192" 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="M527.91,789.4292 C489.09,799.3592 440.63,815.6592 403,841.0592 C386.38,852.2692 371.81,869.7892 361.85,883.6592 " fill="none" id="authoritative->hostname" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="358.91,887.8392,367.3694,882.7956,361.7945,883.7552,360.8349,878.1803,358.91,887.8392" 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->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->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->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->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->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="M329.74,1137.5092 C406.04,1156.4892 527.27,1186.6392 594.35,1203.3192 " fill="none" id="failed->nak" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="599.48,1204.5992,591.7189,1198.5358,594.6293,1203.3865,589.7786,1206.297,599.48,1204.5992" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[0f73f9f94dec6643990f2b1b148176bd] +@startuml + +title DHCPv4 Assign Lease (Kea 1.8.0) + +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 - - -> authoritative : found +by_client_id - -> by_hw_addr : not found +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 + +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/sphinx/uml/assign-lease4.uml b/doc/sphinx/uml/assign-lease4.uml new file mode 100644 index 0000000..de19ed7 --- /dev/null +++ b/doc/sphinx/uml/assign-lease4.uml @@ -0,0 +1,64 @@ +@startuml + +title DHCPv4 Assign Lease (Kea 1.8.0) + +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 ---> authoritative : found +by_client_id --> by_hw_addr : not found +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/sphinx/uml/buildCfgOptionList.png b/doc/sphinx/uml/buildCfgOptionList.png Binary files differnew file mode 100644 index 0000000..262b10e --- /dev/null +++ b/doc/sphinx/uml/buildCfgOptionList.png diff --git a/doc/sphinx/uml/buildCfgOptionList.svg b/doc/sphinx/uml/buildCfgOptionList.svg new file mode 100644 index 0000000..c42e8d7 --- /dev/null +++ b/doc/sphinx/uml/buildCfgOptionList.svg @@ -0,0 +1,62 @@ +<?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="1473px" preserveAspectRatio="none" style="width:631px;height:1473px;" version="1.1" viewBox="0 0 631 1473" width="631px" zoomAndPan="magnify"><defs><filter height="300%" id="fir6yoc6xktif" 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="602" x="13.5" y="27.4023">buildCfgOptionList: build configured option list algorithm (Kea 1.8.0)</text><ellipse cx="285.25" cy="41.1992" fill="#000000" filter="url(#fir6yoc6xktif)" rx="10" ry="10" style="stroke: none; stroke-width: 1.0;"/><rect fill="#FEFECE" filter="url(#fir6yoc6xktif)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="213" x="178.75" y="71.1992"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="193" x="188.75" y="92.8008">Get (empty) configured option list</text><rect fill="#FEFECE" filter="url(#fir6yoc6xktif)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="55" x="257.75" y="173.8096"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="35" x="267.75" y="195.4111">return</text><ellipse cx="285.25" cy="247.376" fill="#FFFFFF" filter="url(#fir6yoc6xktif)" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="285.25" cy="247.376" fill="#000000" rx="6" ry="6" style="stroke: #7F7F7F; stroke-width: 1.0;"/><polygon fill="#FEFECE" filter="url(#fir6yoc6xktif)" points="258.25,125.332,312.25,125.332,324.25,137.332,312.25,149.332,258.25,149.332,246.25,137.332,258.25,125.332" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="289.25" y="159.9668">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="54" x="258.25" y="141.4893">no subnet</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="324.25" y="135.0117">no</text><rect fill="#FEFECE" filter="url(#fir6yoc6xktif)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="219" x="175.75" y="348.8535"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="199" x="185.75" y="370.4551">push back host configured options</text><polygon fill="#FEFECE" filter="url(#fir6yoc6xktif)" points="219.75,300.376,350.75,300.376,362.75,312.376,350.75,324.376,219.75,324.376,207.75,312.376,219.75,300.376" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="289.25" y="335.0107">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="131" x="219.75" y="316.5332">current host reservation</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="362.75" y="310.0557">no</text><polygon fill="#FEFECE" filter="url(#fir6yoc6xktif)" points="285.25,402.9863,297.25,414.9863,285.25,426.9863,273.25,414.9863,285.25,402.9863" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#FEFECE" filter="url(#fir6yoc6xktif)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="188" x="191.25" y="495.4639"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="168" x="201.25" y="517.0654">get pool of assigned address</text><rect fill="#FEFECE" filter="url(#fir6yoc6xktif)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="220" x="175.25" y="598.0742"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="200" x="185.25" y="619.6758">push back pool configured options</text><polygon fill="#FEFECE" filter="url(#fir6yoc6xktif)" points="273.25,549.5967,297.25,549.5967,309.25,561.5967,297.25,573.5967,273.25,573.5967,261.25,561.5967,273.25,549.5967" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="289.25" y="584.2314">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="24" x="273.25" y="565.7539">pool</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="309.25" y="559.2764">no</text><polygon fill="#FEFECE" filter="url(#fir6yoc6xktif)" points="285.25,652.207,297.25,664.207,285.25,676.207,273.25,664.207,285.25,652.207" style="stroke: #A80036; stroke-width: 1.5;"/><polygon fill="#FEFECE" filter="url(#fir6yoc6xktif)" points="238.25,446.9863,332.25,446.9863,344.25,458.9863,332.25,470.9863,238.25,470.9863,226.25,458.9863,238.25,446.9863" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="289.25" y="481.6211">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="94" x="238.25" y="463.1436">assigned address</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="344.25" y="456.666">no</text><polygon fill="#FEFECE" filter="url(#fir6yoc6xktif)" points="285.25,696.207,297.25,708.207,285.25,720.207,273.25,708.207,285.25,696.207" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#FEFECE" filter="url(#fir6yoc6xktif)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="234" x="168.25" y="740.207"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="214" x="178.25" y="761.8086">push back subnet configured options</text><rect fill="#FEFECE" filter="url(#fir6yoc6xktif)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="206" x="182.25" y="794.3398"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="186" x="192.25" y="815.9414">get shared network from subnet</text><rect fill="#FEFECE" filter="url(#fir6yoc6xktif)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="285" x="142.75" y="896.9502"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="265" x="152.75" y="918.5518">push back shared network configured options</text><polygon fill="#FEFECE" filter="url(#fir6yoc6xktif)" points="243.75,848.4727,326.75,848.4727,338.75,860.4727,326.75,872.4727,243.75,872.4727,231.75,860.4727,243.75,848.4727" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="289.25" y="883.1074">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="83" x="243.75" y="864.6299">shared network</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="338.75" y="858.1523">no</text><polygon fill="#FEFECE" filter="url(#fir6yoc6xktif)" points="285.25,951.083,297.25,963.083,285.25,975.083,273.25,963.083,285.25,951.083" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#FEFECE" filter="url(#fir6yoc6xktif)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="315" x="127.75" y="1039.083"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="295" x="137.75" y="1060.6846">get client class definition from current configuration</text><polygon fill="#FEFECE" filter="url(#fir6yoc6xktif)" points="269.25,1093.2158,301.25,1093.2158,313.25,1105.2158,301.25,1117.2158,269.25,1117.2158,257.25,1105.2158,269.25,1093.2158" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="32" x="269.25" y="1109.373">found</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="243.25" y="1102.8955">no</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="313.25" y="1102.8955">yes</text><rect fill="#FEFECE" filter="url(#fir6yoc6xktif)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="197" x="38" y="1175.6934"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="177" x="48" y="1197.2949">log debug "class unconfigured"</text><polygon fill="#FEFECE" filter="url(#fir6yoc6xktif)" points="85.5,1127.2158,187.5,1127.2158,199.5,1139.2158,187.5,1151.2158,85.5,1151.2158,73.5,1139.2158,85.5,1127.2158" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="140.5" y="1161.8506">no</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="102" x="85.5" y="1143.373">built-in client class</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="199.5" y="1136.8955">yes</text><polygon fill="#FEFECE" filter="url(#fir6yoc6xktif)" points="136.5,1229.8262,148.5,1241.8262,136.5,1253.8262,124.5,1241.8262,136.5,1229.8262" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#FEFECE" filter="url(#fir6yoc6xktif)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="314" x="277" y="1127.2158"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="294" x="287" y="1148.8174">push back client class definition configured options</text><polygon fill="#FEFECE" filter="url(#fir6yoc6xktif)" points="285.25,1259.8262,297.25,1271.8262,285.25,1283.8262,273.25,1271.8262,285.25,1259.8262" style="stroke: #A80036; stroke-width: 1.5;"/><polygon fill="#FEFECE" filter="url(#fir6yoc6xktif)" points="215.25,995.083,355.25,995.083,367.25,1007.083,355.25,1019.083,215.25,1019.083,203.25,1007.083,215.25,995.083" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="140" x="215.25" y="1011.2402">for each query client class</text><rect fill="#FEFECE" filter="url(#fir6yoc6xktif)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="230" x="170.25" y="1325.8262"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="210" x="180.25" y="1347.4277">push back global configured options</text><rect fill="#FEFECE" filter="url(#fir6yoc6xktif)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="55" x="257.75" y="1379.959"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="35" x="267.75" y="1401.5605">return</text><ellipse cx="285.25" cy="1445.0918" fill="#FFFFFF" filter="url(#fir6yoc6xktif)" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="285.25" cy="1445.0918" fill="#000000" rx="6" ry="6" style="stroke: #7F7F7F; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="285.25" y1="51.1992" y2="71.1992"/><polygon fill="#A80036" points="281.25,61.1992,285.25,71.1992,289.25,61.1992,285.25,65.1992" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="285.25" y1="207.9424" y2="236.376"/><polygon fill="#A80036" points="281.25,226.376,285.25,236.376,289.25,226.376,285.25,230.376" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="285.25" y1="149.332" y2="173.8096"/><polygon fill="#A80036" points="281.25,163.8096,285.25,173.8096,289.25,163.8096,285.25,167.8096" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="324.25" x2="336.25" y1="137.332" y2="137.332"/><polygon fill="#A80036" points="332.25,206.376,336.25,216.376,340.25,206.376,336.25,210.376" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="336.25" x2="336.25" y1="137.332" y2="280.376"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="336.25" x2="285.25" y1="280.376" y2="280.376"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="285.25" y1="280.376" y2="300.376"/><polygon fill="#A80036" points="281.25,290.376,285.25,300.376,289.25,290.376,285.25,294.376" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="285.25" y1="105.332" y2="125.332"/><polygon fill="#A80036" points="281.25,115.332,285.25,125.332,289.25,115.332,285.25,119.332" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="285.25" y1="324.376" y2="348.8535"/><polygon fill="#A80036" points="281.25,338.8535,285.25,348.8535,289.25,338.8535,285.25,342.8535" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="362.75" x2="404.75" y1="312.376" y2="312.376"/><polygon fill="#A80036" points="400.75,355.9199,404.75,365.9199,408.75,355.9199,404.75,359.9199" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="404.75" x2="404.75" y1="312.376" y2="414.9863"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="404.75" x2="297.25" y1="414.9863" y2="414.9863"/><polygon fill="#A80036" points="307.25,410.9863,297.25,414.9863,307.25,418.9863,303.25,414.9863" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="285.25" y1="382.9863" y2="402.9863"/><polygon fill="#A80036" points="281.25,392.9863,285.25,402.9863,289.25,392.9863,285.25,396.9863" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="285.25" y1="573.5967" y2="598.0742"/><polygon fill="#A80036" points="281.25,588.0742,285.25,598.0742,289.25,588.0742,285.25,592.0742" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="309.25" x2="405.25" y1="561.5967" y2="561.5967"/><polygon fill="#A80036" points="401.25,605.1406,405.25,615.1406,409.25,605.1406,405.25,609.1406" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="405.25" x2="405.25" y1="561.5967" y2="664.207"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="405.25" x2="297.25" y1="664.207" y2="664.207"/><polygon fill="#A80036" points="307.25,660.207,297.25,664.207,307.25,668.207,303.25,664.207" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="285.25" y1="632.207" y2="652.207"/><polygon fill="#A80036" points="281.25,642.207,285.25,652.207,289.25,642.207,285.25,646.207" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="285.25" y1="529.5967" y2="549.5967"/><polygon fill="#A80036" points="281.25,539.5967,285.25,549.5967,289.25,539.5967,285.25,543.5967" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="285.25" y1="470.9863" y2="495.4639"/><polygon fill="#A80036" points="281.25,485.4639,285.25,495.4639,289.25,485.4639,285.25,489.4639" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="344.25" x2="427.25" y1="458.9863" y2="458.9863"/><polygon fill="#A80036" points="423.25,570.5742,427.25,580.5742,431.25,570.5742,427.25,574.5742" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="427.25" x2="427.25" y1="458.9863" y2="708.207"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="427.25" x2="297.25" y1="708.207" y2="708.207"/><polygon fill="#A80036" points="307.25,704.207,297.25,708.207,307.25,712.207,303.25,708.207" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="285.25" y1="676.207" y2="696.207"/><polygon fill="#A80036" points="281.25,686.207,285.25,696.207,289.25,686.207,285.25,690.207" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="285.25" y1="426.9863" y2="446.9863"/><polygon fill="#A80036" points="281.25,436.9863,285.25,446.9863,289.25,436.9863,285.25,440.9863" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="285.25" y1="720.207" y2="740.207"/><polygon fill="#A80036" points="281.25,730.207,285.25,740.207,289.25,730.207,285.25,734.207" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="285.25" y1="774.3398" y2="794.3398"/><polygon fill="#A80036" points="281.25,784.3398,285.25,794.3398,289.25,784.3398,285.25,788.3398" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="285.25" y1="872.4727" y2="896.9502"/><polygon fill="#A80036" points="281.25,886.9502,285.25,896.9502,289.25,886.9502,285.25,890.9502" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="338.75" x2="437.75" y1="860.4727" y2="860.4727"/><polygon fill="#A80036" points="433.75,904.0166,437.75,914.0166,441.75,904.0166,437.75,908.0166" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="437.75" x2="437.75" y1="860.4727" y2="963.083"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="437.75" x2="297.25" y1="963.083" y2="963.083"/><polygon fill="#A80036" points="307.25,959.083,297.25,963.083,307.25,967.083,303.25,963.083" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="285.25" y1="931.083" y2="951.083"/><polygon fill="#A80036" points="281.25,941.083,285.25,951.083,289.25,941.083,285.25,945.083" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="285.25" y1="828.4727" y2="848.4727"/><polygon fill="#A80036" points="281.25,838.4727,285.25,848.4727,289.25,838.4727,285.25,842.4727" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="136.5" x2="136.5" y1="1151.2158" y2="1175.6934"/><polygon fill="#A80036" points="132.5,1165.6934,136.5,1175.6934,140.5,1165.6934,136.5,1169.6934" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="199.5" x2="245" y1="1139.2158" y2="1139.2158"/><polygon fill="#A80036" points="241,1182.7598,245,1192.7598,249,1182.7598,245,1186.7598" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="245" x2="245" y1="1139.2158" y2="1241.8262"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="245" x2="148.5" y1="1241.8262" y2="1241.8262"/><polygon fill="#A80036" points="158.5,1237.8262,148.5,1241.8262,158.5,1245.8262,154.5,1241.8262" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="136.5" x2="136.5" y1="1209.8262" y2="1229.8262"/><polygon fill="#A80036" points="132.5,1219.8262,136.5,1229.8262,140.5,1219.8262,136.5,1223.8262" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257.25" x2="136.5" y1="1105.2158" y2="1105.2158"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="136.5" x2="136.5" y1="1105.2158" y2="1127.2158"/><polygon fill="#A80036" points="132.5,1117.2158,136.5,1127.2158,140.5,1117.2158,136.5,1121.2158" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="313.25" x2="434" y1="1105.2158" y2="1105.2158"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="434" x2="434" y1="1105.2158" y2="1127.2158"/><polygon fill="#A80036" points="430,1117.2158,434,1127.2158,438,1117.2158,434,1121.2158" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="136.5" x2="136.5" y1="1253.8262" y2="1271.8262"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="136.5" x2="273.25" y1="1271.8262" y2="1271.8262"/><polygon fill="#A80036" points="263.25,1267.8262,273.25,1271.8262,263.25,1275.8262,267.25,1271.8262" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="434" x2="434" y1="1161.3486" y2="1271.8262"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="434" x2="297.25" y1="1271.8262" y2="1271.8262"/><polygon fill="#A80036" points="307.25,1267.8262,297.25,1271.8262,307.25,1275.8262,303.25,1271.8262" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="285.25" y1="1073.2158" y2="1093.2158"/><polygon fill="#A80036" points="281.25,1083.2158,285.25,1093.2158,289.25,1083.2158,285.25,1087.2158" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="285.25" y1="1019.083" y2="1039.083"/><polygon fill="#A80036" points="281.25,1029.083,285.25,1039.083,289.25,1029.083,285.25,1033.083" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="285.25" y1="1283.8262" y2="1293.8262"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="605" y1="1293.8262" y2="1293.8262"/><polygon fill="#A80036" points="601,1154.1934,605,1144.1934,609,1154.1934,605,1150.1934" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="605" x2="605" y1="1007.083" y2="1293.8262"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="605" x2="367.25" y1="1007.083" y2="1007.083"/><polygon fill="#A80036" points="377.25,1003.083,367.25,1007.083,377.25,1011.083,373.25,1007.083" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="203.25" x2="24" y1="1007.083" y2="1007.083"/><polygon fill="#A80036" points="20,1140.1934,24,1150.1934,28,1140.1934,24,1144.1934" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="24" x2="24" y1="1007.083" y2="1305.8262"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="24" x2="285.25" y1="1305.8262" y2="1305.8262"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="285.25" y1="1305.8262" y2="1325.8262"/><polygon fill="#A80036" points="281.25,1315.8262,285.25,1325.8262,289.25,1315.8262,285.25,1319.8262" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="285.25" y1="975.083" y2="995.083"/><polygon fill="#A80036" points="281.25,985.083,285.25,995.083,289.25,985.083,285.25,989.083" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="285.25" y1="1359.959" y2="1379.959"/><polygon fill="#A80036" points="281.25,1369.959,285.25,1379.959,289.25,1369.959,285.25,1373.959" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="285.25" x2="285.25" y1="1414.0918" y2="1434.0918"/><polygon fill="#A80036" points="281.25,1424.0918,285.25,1434.0918,289.25,1424.0918,285.25,1428.0918" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[bd4aec0a1192fe47e86baeddbb8cfe25] +@startuml + +title buildCfgOptionList: build configured option list algorithm (Kea 1.8.0) + +start +:Get (empty) configured option list; + +if (no subnet) then (yes) + :return; + stop +else (no) +endif + +if (current host reservation) then (yes) + :push back host configured options; +else (no) +endif + +if (assigned address) then (yes) + :get pool of assigned address; + if (pool) then (yes) + :push back pool configured options; + else (no) + endif +else (no) +endif + +:push back subnet configured options; + +:get shared network from subnet; +if (shared network) then (yes) + :push back shared network configured options; +else (no) +endif + +while (for each query client class) + :get client class definition from current configuration; + if (found) then (no) + if (built-in client class) then (yes) + else (no) + :log debug "class unconfigured"; + endif + else (yes) + :push back client class definition configured options; + endif +endwhile + +:push back global configured options; +:return; +stop + +@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/sphinx/uml/buildCfgOptionList.uml b/doc/sphinx/uml/buildCfgOptionList.uml new file mode 100644 index 0000000..1df19f8 --- /dev/null +++ b/doc/sphinx/uml/buildCfgOptionList.uml @@ -0,0 +1,52 @@ +@startuml + +title buildCfgOptionList: build configured option list algorithm (Kea 1.8.0) + +start +:Get (empty) configured option list; + +if (no subnet) then (yes) + :return; + stop +else (no) +endif + +if (current host reservation) then (yes) + :push back host configured options; +else (no) +endif + +if (assigned address) then (yes) + :get pool of assigned address; + if (pool) then (yes) + :push back pool configured options; + else (no) + endif +else (no) +endif + +:push back subnet configured options; + +:get shared network from subnet; +if (shared network) then (yes) + :push back shared network configured options; +else (no) +endif + +while (for each query client class) + :get client class definition from current configuration; + if (found) then (no) + if (built-in client class) then (yes) + else (no) + :log debug "class unconfigured"; + endif + else (yes) + :push back client class definition configured options; + endif +endwhile + +:push back global configured options; +:return; +stop + +@enduml diff --git a/doc/sphinx/uml/currentHost4.png b/doc/sphinx/uml/currentHost4.png Binary files differnew file mode 100644 index 0000000..e8aa59e --- /dev/null +++ b/doc/sphinx/uml/currentHost4.png diff --git a/doc/sphinx/uml/currentHost4.svg b/doc/sphinx/uml/currentHost4.svg new file mode 100644 index 0000000..1db758c --- /dev/null +++ b/doc/sphinx/uml/currentHost4.svg @@ -0,0 +1,147 @@ +<?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="2163px" preserveAspectRatio="none" style="width:969px;height:2163px;" version="1.1" viewBox="0 0 969 2163" width="969px" zoomAndPan="magnify"><defs><filter height="300%" id="fgxgo3z1vpo2" 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="277" x="337.25" y="17.4023">currentHost DHCPv4 (Kea 1.8.0)</text><!--MD5=[e3476fda087b0512b1cf4e3a66ca5e59] +entity entry--><rect fill="#FEFECE" filter="url(#fgxgo3z1vpo2)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="134" x="314.5" y="28.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="114" x="324.5" y="51.7344">Subnet Selection</text><!--MD5=[f65ad2d20ed779f8ee7fa3e9ca8ab4c3] +entity setSelected--><rect fill="#FEFECE" filter="url(#fgxgo3z1vpo2)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="247" x="258" y="125.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="227" x="268" y="148.7344">Set subnet to the selected subnet</text><!--MD5=[c0678c1aaf89874ea821e39d7ef5404f] +entity clientid_lookup--><rect fill="#FEFECE" filter="url(#fgxgo3z1vpo2)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="245" x="259" y="222.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="225" x="269" y="245.7344">Has client a lease for its client id?</text><!--MD5=[a51c27fcfb0c2b9388b266a7e30efdf3] +entity clientid_iterate--><rect fill="#FEFECE" filter="url(#fgxgo3z1vpo2)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="283" x="7" y="319.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="263" x="17" y="342.7344">Iterate on allowed subnets for client id</text><!--MD5=[96d14c76c72fae1f84c71c464af0f0e6] +entity found_clientid--><rect fill="#FEFECE" filter="url(#fgxgo3z1vpo2)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="253" x="22" y="498.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="233" x="32" y="521.7344">Set subnet to the by client id lease</text><!--MD5=[9f5518b92d1482f0724c659635bb4f8f] +entity hwaddr_lookup--><rect fill="#FEFECE" filter="url(#fgxgo3z1vpo2)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="211" x="449" y="432.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="191" x="459" y="455.7344">Has client a matching lease?</text><!--MD5=[7366630e5488cbc20c26d829a87e86ca] +entity hwaddr_iterate--><rect fill="#FEFECE" filter="url(#fgxgo3z1vpo2)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="352" x="201.5" y="564.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="332" x="211.5" y="587.7344">Iterate on allowed subnets for hardware address</text><!--MD5=[096d593c9a7e1a0b5ae2681804d4217f] +entity found_hwaddr--><rect fill="#FEFECE" filter="url(#fgxgo3z1vpo2)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="243" x="229" y="677.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="223" x="239" y="700.7344">Set subnet to the matching lease</text><!--MD5=[f1bd864ca92b3a59ad91e15b6c278a16] +entity hasAddressReservation--><rect fill="#FEFECE" filter="url(#fgxgo3z1vpo2)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="211" x="375" y="930.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="191" x="385" y="953.7344">Has an address reservation?</text><!--MD5=[0af8b8cc29117b7db26a4bf8fde82b62] +entity setAddressReservation--><rect fill="#FEFECE" filter="url(#fgxgo3z1vpo2)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="300" x="220.5" y="1043.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="280" x="230.5" y="1066.7344">Set subnet to address reservation subnet</text><!--MD5=[42a0a2711e18aa980e3ea9f910af1c90] +entity pool--><rect fill="#FEFECE" filter="url(#fgxgo3z1vpo2)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="251" x="355" y="1140.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="231" x="365" y="1163.7344">Is the address in an allowed pool?</text><!--MD5=[ec337e6f6831b541235537d1c5125816] +entity pool_iterate--><rect fill="#FEFECE" filter="url(#fgxgo3z1vpo2)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="269" x="141" y="1237.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="249" x="151" y="1260.7344">Iterate on allowed subnets with pool</text><!--MD5=[8426a0f58e3c900bd89aafdc516c0a64] +entity inAllowedPool--><rect fill="#FEFECE" filter="url(#fgxgo3z1vpo2)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="254" x="148.5" y="1350.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="234" x="158.5" y="1373.7344">Set subnet to address pool subnet</text><!--MD5=[c7571992746652353b375880ae850124] +entity allocate--><rect fill="#FEFECE" filter="url(#fgxgo3z1vpo2)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="158" x="393.5" y="1447.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="138" x="403.5" y="1470.7344">Allocate a new lease</text><!--MD5=[539657d7008b7b9e186112fa27fe2a64] +entity allocate_iterate--><rect fill="#FEFECE" filter="url(#fgxgo3z1vpo2)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="201" x="232" y="1560.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="181" x="242" y="1583.7344">Iterate on allowed subnets</text><!--MD5=[98bd7f0fd78ffed8e2b0c08f2369be38] +entity allocated--><rect fill="#FEFECE" filter="url(#fgxgo3z1vpo2)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="266" x="270.5" y="1673.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="246" x="280.5" y="1696.7344">Set subnet to allocated lease subnet</text><!--MD5=[a2ab21a8d09e419da8ba4e22e422b87f] +entity getHRmode--><rect fill="#FEFECE" filter="url(#fgxgo3z1vpo2)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="252" x="394.5" y="1770.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="232" x="404.5" y="1793.7344">Get subnet host reservation mode</text><!--MD5=[9e66760393f24350dd53d10577644815] +entity checkHRmode--><rect fill="#FEFECE" filter="url(#fgxgo3z1vpo2)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="293" x="374" y="1867.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="273" x="384" y="1890.7344">Is subnet host reservation mode global?</text><!--MD5=[9225881c05e5dcc29801826dc3c4a44b] +entity global--><rect fill="#FEFECE" filter="url(#fgxgo3z1vpo2)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="205" x="298" y="1980.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="185" x="308" y="2003.7344">Get global host reservation</text><!--MD5=[fb2193611fca68211907294b61bd1772] +entity bySubnet--><rect fill="#FEFECE" filter="url(#fgxgo3z1vpo2)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="209" x="538" y="1980.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="189" x="548" y="2003.7344">Get subnet host reservation</text><!--MD5=[c13398c59c328d6fcc544c8c17f5b117] +entity return--><rect fill="#FEFECE" filter="url(#fgxgo3z1vpo2)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="235" x="403" y="2093.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="215" x="413" y="2116.7344">Return current host reservation</text><!--MD5=[4190d3dcd511d21b11bd238065bcb30b] +link entry to setSelected--><path d="M381.5,64.6192 C381.5,80.1592 381.5,102.9792 381.5,119.8592 " fill="none" id="entry->setSelected" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="381.5,124.8892,385.5,115.8892,381.5,119.8892,377.5,115.8892,381.5,124.8892" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[e08d915304835ed62ca4e0728c34eef1] +link setSelected to clientid_lookup--><path d="M381.5,161.6192 C381.5,177.1592 381.5,199.9792 381.5,216.8592 " fill="none" id="setSelected->clientid_lookup" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="381.5,221.8892,385.5,212.8892,381.5,216.8892,377.5,212.8892,381.5,221.8892" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[6be1f2e9e03fb1c5265b47f0fe05d4fb] +link clientid_lookup to hwaddr_lookup--><path d="M450.66,258.2792 C487.31,270.2592 530.95,289.5492 561.5,319.1992 C589.76,346.6192 605.63,365.0792 592.5,402.1992 C589.19,411.5492 583.15,420.3992 576.84,427.8492 " fill="none" id="clientid_lookup->hwaddr_lookup" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="573.32,431.8292,582.2724,427.7238,576.6267,428.0788,576.2717,422.4331,573.32,431.8292" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="116" x="591.5" y="342.2676">no client id option</text><!--MD5=[e88e8ce2e61ddfe0f17d6f35f9f4b567] +link clientid_lookup to clientid_iterate--><path d="M339.58,258.2892 C298.95,274.8592 237.46,299.9292 195.27,317.1292 " fill="none" id="clientid_lookup->clientid_iterate" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="190.48,319.0792,200.324,319.3879,195.1105,317.1927,197.3056,311.9792,190.48,319.0792" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[574cfa9865ae5a8c4342d01c24825c76] +link clientid_iterate to clientid_iterate--><path d="M290.1,329.0592 C310.94,330.3392 325,333.0492 325,337.1992 C325,340.9892 313.25,343.5892 295.32,344.9792 " fill="none" id="clientid_iterate->clientid_iterate" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="290.1,345.3392,299.3532,348.7123,295.0882,344.9962,298.8044,340.7312,290.1,345.3392" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="224" x="331" y="342.2676">match-client-id is false or no lease</text><!--MD5=[6bcef6072872efd8a87246b817e1d22e] +link clientid_iterate to found_clientid--><path d="M148.5,355.4892 C148.5,387.8292 148.5,457.3892 148.5,493.0792 " fill="none" id="clientid_iterate->found_clientid" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="148.5,498.0992,152.5,489.0992,148.5,493.0992,144.5,489.0992,148.5,498.0992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="84" x="149.5" y="398.7676">found a lease</text><!--MD5=[7615618d548cc7387965d08a49484701] +link found_clientid to hasAddressReservation--><path d="M148.5,534.3592 C148.5,557.7292 148.5,600.8792 148.5,637.6992 C148.5,637.6992 148.5,637.6992 148.5,869.1992 C148.5,915.6592 273.28,934.4692 369.84,942.0692 " fill="none" id="found_clientid->hasAddressReservation" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="375,942.4692,366.3353,937.7869,370.0149,942.0836,365.7183,945.7631,375,942.4692" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[a2c6bf2befd5a55c13fb7d14d9b0c240] +link clientid_iterate to hwaddr_lookup--><path d="M180.8,355.2592 C209.44,369.7192 252.75,389.9992 292.5,402.1992 C341.2,417.1492 396.54,427.9392 443.77,435.3792 " fill="none" id="clientid_iterate->hwaddr_lookup" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="448.9,436.1792,440.6245,430.8392,443.9598,435.4082,439.3908,438.7436,448.9,436.1792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="294" x="293.5" y="398.7676">not found by client id, try by hardware address</text><!--MD5=[5a497db9eec20d36442cfd8ff0bb8196] +link hwaddr_lookup to hasAddressReservation--><path d="M660.05,459.9192 C736.51,472.7092 826.5,504.1292 826.5,581.1992 C826.5,581.1992 826.5,581.1992 826.5,869.1992 C826.5,918.2492 692.51,936.4592 591.29,943.2192 " fill="none" id="hwaddr_lookup->hasAddressReservation" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="586.19,943.5492,595.4238,946.9751,591.1801,943.2347,594.9205,938.9909,586.19,943.5492" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="130" x="827.5" y="756.7676">no hardware address</text><!--MD5=[3e65bd8831bbfab836115278d54dbd54] +link hwaddr_lookup to hwaddr_iterate--><path d="M531,468.4592 C498.37,492.4192 439.49,535.6692 404.91,561.0692 " fill="none" id="hwaddr_lookup->hwaddr_iterate" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="400.82,564.0692,410.4373,561.946,404.8438,561.1013,405.6886,555.5078,400.82,564.0692" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[8827ae6ff5ddcc22e7f77fe98cdf1a45] +link hwaddr_iterate to hwaddr_iterate--><path d="M553.73,573.1792 C574.76,574.8192 588.5,577.8192 588.5,582.1992 C588.5,586.1992 577.02,589.0592 558.99,590.7692 " fill="none" id="hwaddr_iterate->hwaddr_iterate" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="553.73,591.2192,563.0395,594.4337,558.7116,590.791,562.3544,586.4631,553.73,591.2192" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="190" x="594.5" y="587.2676">no lease or client id mismatch</text><!--MD5=[c5ee7e899f7e78ebb49c392f0cd68ce0] +link hwaddr_iterate to found_hwaddr--><path d="M373.28,600.5392 C368.61,619.7692 361.05,650.8292 355.93,671.8592 " fill="none" id="hwaddr_iterate->found_hwaddr" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="354.69,676.9792,360.6886,669.1679,355.8623,672.1186,352.9116,667.2923,354.69,676.9792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="84" x="367.5" y="643.7676">found a lease</text><!--MD5=[49806d919f2e8f347acf33d16af6c958] +link found_hwaddr to hasAddressReservation--><path d="M359.44,713.4492 C382.5,757.9792 443.99,876.6992 469.34,925.6492 " fill="none" id="found_hwaddr->hasAddressReservation" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="471.67,930.1592,471.0846,920.3278,469.3713,925.7189,463.9802,924.0056,471.67,930.1592" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[419c32f3c11394d82c4ebd3db00104c7] +link hwaddr_iterate to hasAddressReservation--><path d="M433.87,600.2492 C475.7,616.7892 525.5,646.4992 525.5,694.1992 C525.5,694.1992 525.5,694.1992 525.5,869.1992 C525.5,890.4892 512.76,911.2092 500.84,925.9292 " fill="none" id="hwaddr_iterate->hasAddressReservation" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="497.51,929.9192,506.343,925.5627,500.7095,926.0769,500.1953,920.4435,497.51,929.9192" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="62" x="526.5" y="803.7676">not found</text><!--MD5=[1a9e971bc87c9d378000ad9b2e367c91] +link hasAddressReservation to setAddressReservation--><path d="M463.31,966.5392 C443.86,986.1792 412.17,1018.1492 391.33,1039.1792 " fill="none" id="hasAddressReservation->setAddressReservation" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="387.57,1042.9792,396.7481,1039.4066,391.0912,1039.4295,391.0684,1033.7726,387.57,1042.9792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="21" x="432.5" y="1009.7676">yes</text><!--MD5=[d42a4bd24fb375c431deb7abe8a74e17] +link hasAddressReservation to pool--><path d="M497.22,966.4192 C518.88,990.8992 552.33,1037.4392 538.5,1079.1992 C531.33,1100.8692 515.54,1121.4192 502.24,1135.9792 " fill="none" id="hasAddressReservation->pool" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="498.57,1139.9292,507.6356,1136.0803,501.9821,1136.2744,501.7879,1130.6209,498.57,1139.9292" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="225" x="542.5" y="1066.2676">no or not check in the taken branch</text><!--MD5=[791581dff43cc3b6477c496805383c47] +link setAddressReservation to pool--><path d="M390.42,1079.3992 C409.11,1095.5392 437.07,1119.6992 456.88,1136.7992 " fill="none" id="setAddressReservation->pool" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="460.73,1140.1192,456.5357,1131.2081,456.9468,1136.85,451.305,1137.2612,460.73,1140.1192" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7a1241998e61cc09e6a084344a13ee40] +link pool to pool_iterate--><path d="M443.38,1176.3992 C407.82,1192.8792 354.25,1217.7092 317.23,1234.8592 " fill="none" id="pool->pool_iterate" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="312.35,1237.1192,322.1978,1236.9736,316.8885,1235.0212,318.841,1229.712,312.35,1237.1192" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[1c40abd319323f0f8c3e812984d047be] +link pool to allocate--><path d="M562.27,1176.2592 C595.56,1187.6592 630.78,1206.4492 650.5,1237.1992 C659.14,1250.6692 654.47,1257.6992 650.5,1273.1992 C636.28,1328.6892 627.14,1343.9092 588.5,1386.1992 C566.39,1410.3992 535.31,1430.7792 510.89,1444.6292 " fill="none" id="pool->allocate" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="506.41,1447.1392,516.2178,1446.2406,510.7747,1444.7001,512.3152,1439.2571,506.41,1447.1392" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="205" x="642.5" y="1316.7676">pool check is not in all branches</text><!--MD5=[f92712dd8e32c9acdf8619de922fc5cb] +link pool_iterate to pool_iterate--><path d="M410.12,1246.9692 C430.88,1248.2192 445,1250.9592 445,1255.1992 C445,1259.0792 433.2,1261.6992 415.32,1263.0692 " fill="none" id="pool_iterate->pool_iterate" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="410.12,1263.4292,419.3732,1266.8023,415.1082,1263.0862,418.8244,1258.8212,410.12,1263.4292" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="193" x="451" y="1260.2676">address not in an allowed pool</text><!--MD5=[89f40702130c31205e20b7afecbe9ed1] +link pool_iterate to inAllowedPool--><path d="M275.5,1273.5392 C275.5,1292.7692 275.5,1323.8292 275.5,1344.8592 " fill="none" id="pool_iterate->inAllowedPool" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="275.5,1349.9792,279.5,1340.9792,275.5,1344.9792,271.5,1340.9792,275.5,1349.9792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="168" x="276.5" y="1316.7676">address in an allowed pool</text><!--MD5=[03b0dcad835fe04723134b797eb9a319] +link pool_iterate to allocate--><path d="M375.89,1273.2492 C408.78,1280.8692 439.69,1290.9192 450.5,1303.1992 C484.66,1341.9792 481.2,1407.7092 476.46,1441.9492 " fill="none" id="pool_iterate->allocate" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="475.7,1447.1692,480.9697,1438.8487,476.4291,1442.2227,473.0552,1437.6821,475.7,1447.1692" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="100" x="479.5" y="1373.2676">no allowed pool</text><!--MD5=[27c03cbbcf5b4bbc0f83ff469240ee91] +link inAllowedPool to allocate--><path d="M311.18,1386.3992 C345.34,1402.8792 396.82,1427.7092 432.4,1444.8592 " fill="none" id="inAllowedPool->allocate" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="437.09,1447.1192,430.7227,1439.6054,432.5869,1444.9463,427.246,1446.8104,437.09,1447.1192" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[c7ed7f8e85efd784aa0446a03842ecad] +link allocate to allocate_iterate--><path d="M393.3,1481.6592 C375.37,1488.5992 357.97,1498.6492 345.5,1513.1992 C335.73,1524.5992 332.59,1541.3292 331.83,1554.8292 " fill="none" id="allocate->allocate_iterate" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="331.65,1560.0092,335.9813,1551.1639,331.8356,1555.0127,327.9868,1550.867,331.65,1560.0092" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="240" x="346.5" y="1526.7676">start from preferred (last used) subnet</text><!--MD5=[b4b32474e67014a0ea8b9d2dcb8b921b] +link allocate to getHRmode--><path d="M551.57,1482.2592 C567.28,1489.1692 581.88,1499.0592 591.5,1513.1992 C647.03,1594.8392 571.65,1717.1292 536.65,1765.9492 " fill="none" id="allocate->getHRmode" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="533.6,1770.1692,542.1109,1765.2129,536.5264,1766.1151,535.6242,1760.5306,533.6,1770.1692" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="198" x="605.5" y="1639.7676">allocation is not in all branches</text><!--MD5=[5d722979ddb74375b031e6d5bd55f242] +link allocate_iterate to allocate_iterate--><path d="M433.25,1568.1192 C453.52,1569.2292 468,1572.5892 468,1578.1992 C468,1583.3192 455.9,1586.5692 438.34,1587.9492 " fill="none" id="allocate_iterate->allocate_iterate" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="433.25,1588.2792,442.4936,1591.6787,438.2392,1587.9504,441.9675,1583.696,433.25,1588.2792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="97" x="474" y="1583.2676">no free address</text><!--MD5=[0a74e69bd975a88dffe2300213585d86] +link allocate_iterate to allocated--><path d="M343.59,1596.5392 C356.05,1616.0092 376.26,1647.6192 389.72,1668.6592 " fill="none" id="allocate_iterate->allocated" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="392.48,1672.9792,390.9779,1663.2456,389.7762,1668.7733,384.2485,1667.5716,392.48,1672.9792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="129" x="373.5" y="1639.7676">found a free address</text><!--MD5=[1be0f2f74e199399aa4e09476dce36f7] +link allocated to getHRmode--><path d="M424.69,1709.3992 C444.57,1725.5392 474.31,1749.6992 495.38,1766.7992 " fill="none" id="allocated->getHRmode" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="499.47,1770.1192,494.9879,1761.3494,495.5824,1766.9749,489.9569,1767.5694,499.47,1770.1192" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[9e14dd0054774aedb71cf602d40d12b7] +link getHRmode to checkHRmode--><path d="M520.5,1806.6192 C520.5,1822.1592 520.5,1844.9792 520.5,1861.8592 " fill="none" id="getHRmode->checkHRmode" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="520.5,1866.8892,524.5,1857.8892,520.5,1861.8892,516.5,1857.8892,520.5,1866.8892" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[a84b25cfb30efcca4b707749deb6e97a] +link checkHRmode to global--><path d="M502.01,1903.2992 C480.76,1922.9592 445.87,1955.2292 423.04,1976.3492 " fill="none" id="checkHRmode->global" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="419.21,1979.8992,428.5379,1976.7384,422.8857,1976.5096,423.1145,1970.8574,419.21,1979.8992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="21" x="468.5" y="1946.7676">yes</text><!--MD5=[a6bc61640de244f08df3cca17a4f2365] +link checkHRmode to bySubnet--><path d="M539.3,1903.2992 C560.9,1922.9592 596.37,1955.2292 619.58,1976.3492 " fill="none" id="checkHRmode->bySubnet" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="623.48,1979.8992,619.5026,1970.8892,619.7771,1976.5394,614.1269,1976.8139,623.48,1979.8992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="16" x="589.5" y="1946.7676">no</text><!--MD5=[b516e9f33f07fd0923019528919312cb] +link global to return--><path d="M397.59,2016.3892 C396.2,2030.3392 396.61,2049.8292 406.5,2063.1992 C415.42,2075.2592 428,2084.2392 441.56,2090.9292 " fill="none" id="global->return" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="446.2,2093.1092,439.7564,2085.6607,441.6749,2090.9823,436.3533,2092.9008,446.2,2093.1092" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="187" x="407.5" y="2059.7676">return global host reservation</text><!--MD5=[31ce4acb5044d12c75fb908f2994650f] +link bySubnet to return--><path d="M633.84,2016.2092 C626.18,2030.0592 613.99,2049.4892 599.5,2063.1992 C588.25,2073.8392 574.18,2083.1692 561.05,2090.6492 " fill="none" id="bySubnet->return" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="556.63,2093.1192,566.4378,2092.2206,560.9947,2090.6801,562.5352,2085.2371,556.63,2093.1192" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="191" x="614.5" y="2059.7676">return subnet host reservation</text><text fill="#888888" font-family="sans-serif" font-size="10" lengthAdjust="spacingAndGlyphs" textLength="622" x="164.75" y="2150.3555">Only the initial lookup is always performed: other occasions to change the subnet so the current host are only in some branches</text><!--MD5=[84940467d5c8b64b9d1a8ec6eb53bf6f] +@startuml + +title currentHost DHCPv4 (Kea 1.8.0) + +agent "Subnet Selection" as entry + +agent "Set subnet to the selected subnet" as setSelected + +agent "Has client a lease for its client id?" as clientid_lookup + +agent "Iterate on allowed subnets for client id" as clientid_iterate + +agent "Set subnet to the by client id lease" as found_clientid + +agent "Has client a matching lease?" as hwaddr_lookup + +agent "Iterate on allowed subnets for hardware address" as hwaddr_iterate + +agent "Set subnet to the matching lease" as found_hwaddr + +agent "Has an address reservation?" as hasAddressReservation + +agent "Set subnet to address reservation subnet" as setAddressReservation + +agent "Is the address in an allowed pool?" as pool + +agent "Iterate on allowed subnets with pool" as pool_iterate + +agent "Set subnet to address pool subnet" as inAllowedPool + +agent "Allocate a new lease" as allocate + +agent "Iterate on allowed subnets" as allocate_iterate + +agent "Set subnet to allocated lease subnet" as allocated + +agent "Get subnet host reservation mode" as getHRmode + +agent "Is subnet host reservation mode global?" as checkHRmode + +agent "Get global host reservation" as global + +agent "Get subnet host reservation" as bySubnet + +agent "Return current host reservation" as return + +entry - -> setSelected +setSelected - -> clientid_lookup +clientid_lookup - - -> hwaddr_lookup : no client id option +clientid_lookup - -> clientid_iterate +clientid_iterate -> clientid_iterate : match-client-id is false or no lease +clientid_iterate - -> found_clientid : found a lease +found_clientid - - - -> hasAddressReservation +clientid_iterate - -> hwaddr_lookup : not found by client id, try by hardware address +hwaddr_lookup - - -> hasAddressReservation : no hardware address +hwaddr_lookup - -> hwaddr_iterate +hwaddr_iterate -> hwaddr_iterate : no lease or client id mismatch +hwaddr_iterate - -> found_hwaddr : found a lease +found_hwaddr - - - -> hasAddressReservation +hwaddr_iterate - -> hasAddressReservation : not found +hasAddressReservation - -> setAddressReservation : yes +hasAddressReservation - -> pool : no or not check in the taken branch +setAddressReservation - -> pool +pool - -> pool_iterate +pool - - -> allocate : pool check is not in all branches +pool_iterate -> pool_iterate : address not in an allowed pool +pool_iterate - -> inAllowedPool : address in an allowed pool +pool_iterate - - -> allocate : no allowed pool +inAllowedPool - -> allocate +allocate - -> allocate_iterate : start from preferred (last used) subnet +allocate - - -> getHRmode : allocation is not in all branches +allocate_iterate -> allocate_iterate : no free address +allocate_iterate - -> allocated : found a free address +allocated - -> getHRmode +getHRmode - -> checkHRmode +checkHRmode - -> global : yes +checkHRmode - -> bySubnet : no +global - -> return : return global host reservation +bySubnet - -> return : return subnet host reservation + +footer Only the initial lookup is always performed: other occasions to change the subnet so the current host are only in some branches + +@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/sphinx/uml/currentHost4.uml b/doc/sphinx/uml/currentHost4.uml new file mode 100644 index 0000000..1e9ef4d --- /dev/null +++ b/doc/sphinx/uml/currentHost4.uml @@ -0,0 +1,83 @@ +@startuml + +title currentHost DHCPv4 (Kea 1.8.0) + +agent "Subnet Selection" as entry + +agent "Set subnet to the selected subnet" as setSelected + +agent "Has client a lease for its client id?" as clientid_lookup + +agent "Iterate on allowed subnets for client id" as clientid_iterate + +agent "Set subnet to the by client id lease" as found_clientid + +agent "Has client a matching lease?" as hwaddr_lookup + +agent "Iterate on allowed subnets for hardware address" as hwaddr_iterate + +agent "Set subnet to the matching lease" as found_hwaddr + +agent "Has an address reservation?" as hasAddressReservation + +agent "Set subnet to address reservation subnet" as setAddressReservation + +agent "Is the address in an allowed pool?" as pool + +agent "Iterate on allowed subnets with pool" as pool_iterate + +agent "Set subnet to address pool subnet" as inAllowedPool + +agent "Allocate a new lease" as allocate + +agent "Iterate on allowed subnets" as allocate_iterate + +agent "Set subnet to allocated lease subnet" as allocated + +agent "Get subnet host reservation mode" as getHRmode + +agent "Is subnet host reservation mode global?" as checkHRmode + +agent "Get global host reservation" as global + +agent "Get subnet host reservation" as bySubnet + +agent "Return current host reservation" as return + +entry --> setSelected +setSelected --> clientid_lookup +clientid_lookup ---> hwaddr_lookup : no client id option +clientid_lookup --> clientid_iterate +clientid_iterate -> clientid_iterate : match-client-id is false or no lease +clientid_iterate --> found_clientid : found a lease +found_clientid ----> hasAddressReservation +clientid_iterate --> hwaddr_lookup : not found by client id, try by hardware address +hwaddr_lookup ---> hasAddressReservation : no hardware address +hwaddr_lookup --> hwaddr_iterate +hwaddr_iterate -> hwaddr_iterate : no lease or client id mismatch +hwaddr_iterate --> found_hwaddr : found a lease +found_hwaddr ----> hasAddressReservation +hwaddr_iterate --> hasAddressReservation : not found +hasAddressReservation --> setAddressReservation : yes +hasAddressReservation --> pool : no or not check in the taken branch +setAddressReservation --> pool +pool --> pool_iterate +pool ---> allocate : pool check is not in all branches +pool_iterate -> pool_iterate : address not in an allowed pool +pool_iterate --> inAllowedPool : address in an allowed pool +pool_iterate ---> allocate : no allowed pool +inAllowedPool --> allocate +allocate --> allocate_iterate : start from preferred (last used) subnet +allocate ---> getHRmode : allocation is not in all branches +allocate_iterate -> allocate_iterate : no free address +allocate_iterate --> allocated : found a free address +allocated --> getHRmode +getHRmode --> checkHRmode +checkHRmode --> global : yes +checkHRmode --> bySubnet : no +global --> return : return global host reservation +bySubnet --> return : return subnet host reservation + +footer Only the initial lookup is always performed: other occasions to change the subnet so the current host are only in some branches + +@enduml
\ No newline at end of file diff --git a/doc/sphinx/uml/lease-states.png b/doc/sphinx/uml/lease-states.png Binary files differnew file mode 100644 index 0000000..76fc762 --- /dev/null +++ b/doc/sphinx/uml/lease-states.png diff --git a/doc/sphinx/uml/lease-states.svg b/doc/sphinx/uml/lease-states.svg new file mode 100644 index 0000000..ae70b45 --- /dev/null +++ b/doc/sphinx/uml/lease-states.svg @@ -0,0 +1,67 @@ +<?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="699px" preserveAspectRatio="none" style="width:631px;height:699px;" version="1.1" viewBox="0 0 631 699" width="631px" zoomAndPan="magnify"><defs><filter height="300%" id="f14qs590hur024" 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="203" x="205" y="17.4023">lease states (Kea 1.8.0)</text><!--MD5=[4278daa906671312366ccb0dccb3e92f] +entity free--><rect fill="#FEFECE" filter="url(#f14qs590hur024)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="50" x="268" y="35.3392"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="30" x="278" y="58.8744">Free</text><path d="M55,40.8392 L55,66.1498 A0,0 0 0 0 55,66.1498 L233,66.1498 A0,0 0 0 0 233,66.1498 L233,58.8392 L267.71,53.3392 L233,50.8392 L233,50.8392 L223,40.8392 L55,40.8392 A0,0 0 0 0 55,40.8392 " fill="#FBFB77" filter="url(#f14qs590hur024)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M223,40.8392 L223,50.8392 L233,50.8392 L223,40.8392 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="157" x="61" y="58.4076">not in the lease database</text><!--MD5=[4c0421e83b31106584008715812a1ea8] +entity assigned--><rect fill="#FEFECE" filter="url(#f14qs590hur024)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="83" x="256.5" y="210.3392"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="63" x="266.5" y="233.8744">Assigned</text><!--MD5=[046a8c2cc2caa2564a440430281543c8] +entity assigned_expired--><rect fill="#FEFECE" filter="url(#f14qs590hur024)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="140" x="357" y="323.3392"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="120" x="367" y="346.8744">Assigned expired</text><!--MD5=[be39be446611673079158bd75084bb29] +entity declined--><rect fill="#FEFECE" filter="url(#f14qs590hur024)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="79" x="130.5" y="436.3392"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="59" x="140.5" y="459.8744">Declined</text><!--MD5=[b74f0280ed02bec002eedfc3903cd610] +entity declined_expired--><rect fill="#FEFECE" filter="url(#f14qs590hur024)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="136" x="38" y="549.3392"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="116" x="48" y="572.8744">Declined expired</text><!--MD5=[309798e71ae1dfa592ce5bb406cc7544] +entity reclaimed--><rect fill="#FEFECE" filter="url(#f14qs590hur024)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="151" x="272.5" y="646.3392"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="131" x="282.5" y="669.8744">Expired-Reclaimed</text><!--MD5=[219c0a330ff1ab87a7e7f51a72cedfde] +link free to assigned--><path d="M276.19,71.5392 C260.17,90.0792 239.64,120.7892 248,149.3392 C254.2,170.4992 268.1,191.3692 279.68,206.1892 " fill="none" id="free->assigned" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="282.87,210.1992,280.3967,200.666,279.757,206.2865,274.1364,205.6468,282.87,210.1992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="73" x="249" y="145.9076">assignment</text><!--MD5=[d0e432b1584877a475e5f2fe76611e15] +reverse link free to assigned--><path d="M305.4,76.1392 C313.32,91.3492 322.85,112.4192 327,132.3392 C332.77,160.0292 319.25,191.2292 308.78,210.0792 " fill="none" id="free<-assigned" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="303.01,71.6192,303.6712,81.4459,305.3429,76.0416,310.7471,77.7133,303.01,71.6192" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="83" x="330" y="145.9076">release query</text><!--MD5=[7534ad65a31e40f6f58c860fbe4b1334] +link assigned to assigned_expired--><path d="M339.85,243.3892 C357.83,250.9992 378.09,261.8492 393,276.3392 C405.06,288.0492 413.79,304.9692 419.38,318.4692 " fill="none" id="assigned->assigned_expired" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="421.3,323.2692,421.6714,313.4274,419.443,318.6268,414.2436,316.3985,421.3,323.2692" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="115" x="407" y="289.9076">after valid lifetime</text><!--MD5=[fde569cd6ac85f95e2a638ce16dc5096] +reverse link assigned to assigned_expired--><path d="M312.18,250.8492 C321.59,264.0992 334.8,280.8792 349,293.3392 C362.19,304.9092 378.61,315.2892 392.97,323.3192 " fill="none" id="assigned<-assigned_expired" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="309.13,246.4992,311.0324,256.1626,312.005,250.59,317.5776,251.5626,309.13,246.4992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="34" x="350" y="289.9076">reuse</text><!--MD5=[21716a85bcf00f22f38541e3e291568a] +link assigned to assigned--><path d="M339.71,219.4792 C358.36,218.6392 374.5,221.5892 374.5,228.3392 C374.5,234.4592 361.25,237.4592 344.88,237.3392 " fill="none" id="assigned->assigned" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="339.71,237.1992,348.6042,241.4292,344.7083,237.3277,348.8098,233.4319,339.71,237.1992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="76" x="380.5" y="233.4076">renew query</text><!--MD5=[8bb46c3b4dde016c313b8e321f1d7e1a] +link assigned to declined--><path d="M269.68,246.4392 C245,262.9292 210.38,290.2192 192,323.3392 C173.05,357.4892 169.59,403.8692 169.39,430.9992 " fill="none" id="assigned->declined" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="169.39,436.1592,173.39,427.1592,169.39,431.1592,165.39,427.1592,169.39,436.1592" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="84" x="193" y="346.4076">decline query</text><!--MD5=[8dc60d8855cbb8c3dba4463bc36210b7] +link declined to declined_expired--><path d="M157.58,472.3892 C151.4,481.1592 144,492.1192 138,502.3392 C130.01,515.9592 122.06,531.8392 116.09,544.3692 " fill="none" id="declined->declined_expired" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="113.82,549.1692,121.2851,542.7449,115.9586,544.6497,114.0538,539.3231,113.82,549.1692" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="138" x="139" y="515.9076">after probation period</text><!--MD5=[6d44915acfde63a8254178afd3aa27e3] +reverse link assigned to declined_expired--><path d="M251.59,248.4092 C236.48,255.8492 220.22,265.2692 207,276.3392 C159.82,315.8392 153.14,333.6292 127,389.3392 C101.63,443.4092 102.58,516.5492 104.58,549.2792 " fill="none" id="assigned<-declined_expired" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="256.23,246.1592,246.386,246.468,251.7269,248.3322,249.8627,253.673,256.23,246.1592" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="34" x="128" y="402.9076">reuse</text><!--MD5=[bdcfcd9c1cacddd2a3f75c7ff5da35a5] +link assigned_expired to reclaimed--><path d="M422.75,359.5992 C409.44,413.6992 368.51,579.9992 353.55,640.7892 " fill="none" id="assigned_expired->reclaimed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="352.27,645.9992,358.3119,638.2213,353.4692,641.1452,350.5454,636.3025,352.27,645.9992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="46" x="388" y="515.9076">reclaim</text><!--MD5=[1c9e2837121ab398f7070aba53df7029] +link declined_expired to free--><path d="M75.18,549.2492 C45.8,530.4392 6,497.2292 6,455.3392 C6,139.8392 6,139.8392 6,139.8392 C6,27.1992 143.26,107.3192 250,71.3392 C254.16,69.9392 258.5,68.3592 262.75,66.7492 " fill="none" id="declined_expired->free" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="267.69,64.8392,257.8532,64.3528,263.0262,66.6418,260.7373,71.8148,267.69,64.8392" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="46" x="7" y="289.9076">remove</text><!--MD5=[b52d5a7ca53f64269da3993e04180d07] +reverse link assigned to reclaimed--><path d="M299.31,251.7292 C301.08,283.8392 304,344.8492 304,396.8392 C304,396.8392 304,396.8392 304,568.3392 C304,597.7892 321.62,628.0092 334.56,646.2292 " fill="none" id="assigned<-reclaimed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="299.02,246.4492,295.5152,255.6534,299.2918,251.4418,303.5033,255.2185,299.02,246.4492" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="34" x="305" y="459.4076">reuse</text><!--MD5=[d78006695828b24d5c043b2b2f6223cc] +reverse link free to reclaimed--><path d="M323.27,57.1392 C395.5,64.6392 572,88.2592 572,139.8392 C572,139.8392 572,139.8392 572,568.3392 C572,634.3392 488.55,655.1692 423.52,661.3692 " fill="none" id="free<-reclaimed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="318.25,56.6192,326.8045,61.4998,323.2249,57.1196,327.6051,53.5399,318.25,56.6192" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="46" x="573" y="346.4076">remove</text><!--MD5=[7a97b2a903c7311ebfa1bcbf72f0a383] +link declined_expired to reclaimed--><!--MD5=[ad1f216ff27ad402bdd959662ff0ee60] +@startuml + +title lease states (Kea 1.8.0) + +agent "Free" as free +note left : not in the lease database + +agent "Assigned" as assigned + +agent "Assigned expired" as assigned_expired + +agent "Declined" as declined + +agent "Declined expired" as declined_expired + +agent "Expired-Reclaimed" as reclaimed + +free - - -> assigned : assignment + +assigned -> assigned_expired : after valid lifetime +assigned -> assigned : renew query +assigned - - -> declined : decline query +assigned -up-> free : release query + +declined - -> declined_expired : after probation period + +assigned_expired -up-> assigned : reuse +declined_expired -up-> assigned : reuse + +assigned_expired - - -> reclaimed : reclaim +declined_expired - - -> free : remove + +reclaimed -up-> assigned : reuse +reclaimed -up- -> free : remove + +declined_expired -[hidden]-> reclaimed + +@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/sphinx/uml/lease-states.uml b/doc/sphinx/uml/lease-states.uml new file mode 100644 index 0000000..66de2bb --- /dev/null +++ b/doc/sphinx/uml/lease-states.uml @@ -0,0 +1,38 @@ +@startuml + +title lease states (Kea 1.8.0) + +agent "Free" as free +note left : not in the lease database + +agent "Assigned" as assigned + +agent "Assigned expired" as assigned_expired + +agent "Declined" as declined + +agent "Declined expired" as declined_expired + +agent "Expired-Reclaimed" as reclaimed + +free ---> assigned : assignment + +assigned -> assigned_expired : after valid lifetime +assigned -> assigned : renew query +assigned ---> declined : decline query +assigned -up-> free : release query + +declined --> declined_expired : after probation period + +assigned_expired -up-> assigned : reuse +declined_expired -up-> assigned : reuse + +assigned_expired ---> reclaimed : reclaim +declined_expired ---> free : remove + +reclaimed -up-> assigned : reuse +reclaimed -up--> free : remove + +declined_expired -[hidden]-> reclaimed + +@enduml diff --git a/doc/sphinx/uml/main-loop.png b/doc/sphinx/uml/main-loop.png Binary files differnew file mode 100644 index 0000000..8734007 --- /dev/null +++ b/doc/sphinx/uml/main-loop.png diff --git a/doc/sphinx/uml/main-loop.svg b/doc/sphinx/uml/main-loop.svg new file mode 100644 index 0000000..9ad33e1 --- /dev/null +++ b/doc/sphinx/uml/main-loop.svg @@ -0,0 +1,99 @@ +<?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="974px" preserveAspectRatio="none" style="width:674px;height:974px;" version="1.1" viewBox="0 0 674 974" width="674px" zoomAndPan="magnify"><defs><filter height="300%" id="f1hatkcuz2d0l4" 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="300" x="178" y="17.4023">DHCP server main loop (Kea 1.8.0)</text><!--MD5=[f7a7ee0c51b4e04c55c1f405505b5a33] +cluster Main Loop--><rect fill="#FFFFFF" filter="url(#f1hatkcuz2d0l4)" 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(#f1hatkcuz2d0l4)" 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(#f1hatkcuz2d0l4)" 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(#f1hatkcuz2d0l4)" 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(#f1hatkcuz2d0l4)" 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(#f1hatkcuz2d0l4)" 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(#f1hatkcuz2d0l4)" 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(#f1hatkcuz2d0l4)" 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(#f1hatkcuz2d0l4)" 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(#f1hatkcuz2d0l4)" 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(#f1hatkcuz2d0l4)" 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(#f1hatkcuz2d0l4)" 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(#f1hatkcuz2d0l4)" 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;"/><text fill="#888888" font-family="sans-serif" font-size="10" lengthAdjust="spacingAndGlyphs" textLength="139" x="258.5" y="960.7272">dashed arrow means priority</text><!--MD5=[8fa551d0c9d64d50247cb50d8338b7c4] +@startuml + +title DHCP server main loop (Kea 1.8.0) + +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 + +footer dashed arrow means priority + +@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/sphinx/uml/main-loop.uml b/doc/sphinx/uml/main-loop.uml new file mode 100644 index 0000000..9e29c9f --- /dev/null +++ b/doc/sphinx/uml/main-loop.uml @@ -0,0 +1,60 @@ +@startuml + +title DHCP server main loop (Kea 1.8.0) + +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 + +footer dashed arrow means priority + +@enduml
\ No newline at end of file diff --git a/doc/sphinx/uml/packet4.png b/doc/sphinx/uml/packet4.png Binary files differnew file mode 100644 index 0000000..6fef4e2 --- /dev/null +++ b/doc/sphinx/uml/packet4.png diff --git a/doc/sphinx/uml/packet4.svg b/doc/sphinx/uml/packet4.svg new file mode 100644 index 0000000..2e37ed9 --- /dev/null +++ b/doc/sphinx/uml/packet4.svg @@ -0,0 +1,160 @@ +<?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="1814px" preserveAspectRatio="none" style="width:1862px;height:1814px;" version="1.1" viewBox="0 0 1862 1814" width="1862px" zoomAndPan="magnify"><defs><filter height="300%" id="f1u1c8b25aigi3" 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="332" x="756" y="17.4023">DHCPv4 packet processing (Kea 1.8.0)</text><!--MD5=[91c043391605f0bbc36c648123f05f04] +cluster process--><rect fill="#FFFFFF" filter="url(#f1u1c8b25aigi3)" height="103" style="stroke: #000000; stroke-width: 1.5;" width="849" x="715" y="924.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="257" x="1011" y="939.7344">Process Query on its Message Type</text><!--MD5=[a6437f938727ef6368484703a6d5a51f] +entity processDiscover--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="134" x="1088" y="967.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="114" x="1098" y="990.7344">Process Discover</text><!--MD5=[776f46e8e787ed3ff8f7399fa81d4ef1] +entity processRequest--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="131" x="758.5" y="967.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="111" x="768.5" y="990.7344">Process Request</text><!--MD5=[fc7d6e37f840cd9a10a681e81df6f28b] +entity processRelease--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="128" x="925" y="967.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="108" x="935" y="990.7344">Process Release</text><!--MD5=[8d825f552c438f1d41e38a94f08e3f47] +entity processDecline--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="126" x="1257" y="967.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="106" x="1267" y="990.7344">Process Decline</text><!--MD5=[3b341f45531d1fcf2cf88cb83e9fdef4] +entity processInform--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="122" x="1418" y="967.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="102" x="1428" y="990.7344">Process Inform</text><!--MD5=[aa62c1eea3f70b4dbb2d8a2ad04d8b75] +entity receivePacket--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="114" x="1560" y="28.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="94" x="1570" y="51.7344">Receive query</text><path d="M1471,33.6992 L1471,59.0098 A0,0 0 0 0 1471,59.0098 L1525,59.0098 A0,0 0 0 0 1525,59.0098 L1525,51.6992 L1559.77,46.1992 L1525,43.6992 L1525,43.6992 L1515,33.6992 L1471,33.6992 A0,0 0 0 0 1471,33.6992 " fill="#FBFB77" filter="url(#f1u1c8b25aigi3)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1515,33.6992 L1515,43.6992 L1525,43.6992 L1515,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="1477" y="51.2676">input</text><!--MD5=[37dd4220ca2f2608029cfa1ef00c2d62] +entity isServiceEnabled--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="127" x="1553.5" y="125.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="107" x="1563.5" y="148.7344">Service Enabled</text><!--MD5=[f1e4a9c8bda8d25100748cfdff400bf1] +entity buffer4_receive--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="179" x="1000.5" y="238.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="159" x="1010.5" y="261.7344">Callout buffer4_receive</text><path d="M1214.5,243.6992 L1214.5,252.1992 L1179.66,256.1992 L1214.5,260.1992 L1214.5,269.0098 A0,0 0 0 0 1214.5,269.0098 L1267.5,269.0098 A0,0 0 0 0 1267.5,269.0098 L1267.5,253.6992 L1257.5,243.6992 L1214.5,243.6992 A0,0 0 0 0 1214.5,243.6992 " fill="#FBFB77" filter="url(#f1u1c8b25aigi3)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1257.5,243.6992 L1257.5,253.6992 L1267.5,253.6992 L1257.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="1220.5" y="261.2676">hook</text><!--MD5=[ce6c3f645c8aec4915456c978c48f6f1] +entity unpack--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="114" x="640" y="351.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="94" x="650" y="374.7344">Unpack query</text><!--MD5=[f8582116def27e35cdbbbf5463e43073] +entity classify--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="115" x="639.5" y="448.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="95" x="649.5" y="471.7344">Classify query</text><!--MD5=[92aee3b8b080bbd52e01e7cb395370c4] +entity pkt4_receive--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="159" x="454.5" y="545.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="139" x="464.5" y="568.7344">Callout pkt4_receive</text><path d="M648.5,550.6992 L648.5,559.1992 L613.59,563.1992 L648.5,567.1992 L648.5,576.0098 A0,0 0 0 0 648.5,576.0098 L701.5,576.0098 A0,0 0 0 0 701.5,576.0098 L701.5,560.6992 L691.5,550.6992 L648.5,550.6992 A0,0 0 0 0 648.5,550.6992 " fill="#FBFB77" filter="url(#f1u1c8b25aigi3)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M691.5,550.6992 L691.5,560.6992 L701.5,560.6992 L691.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="654.5" y="568.2676">hook</text><!--MD5=[7aeeef4718a003ce2e7ad9bcbdf71ad9] +entity drop_class--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="141" x="243.5" y="658.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="121" x="253.5" y="681.7344">Check DROP class</text><!--MD5=[a52533196b9ad0f42d77bd2c5acf5304] +entity same_client--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="333" x="147.5" y="755.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="313" x="157.5" y="778.7344">Avoid same client race in multi-threaded mode</text><path d="M587.5,760.6992 L587.5,769.1992 L480.63,773.1992 L587.5,777.1992 L587.5,786.0098 A0,0 0 0 0 587.5,786.0098 L790.5,786.0098 A0,0 0 0 0 790.5,786.0098 L790.5,770.6992 L780.5,760.6992 L587.5,760.6992 A0,0 0 0 0 587.5,760.6992 " fill="#FBFB77" filter="url(#f1u1c8b25aigi3)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M780.5,760.6992 L780.5,770.6992 L790.5,770.6992 L780.5,760.6992 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="182" x="593.5" y="778.2676">postpone processing or drop</text><!--MD5=[a8af8e48f2cc558a0fee70431885f908] +entity leases4_committed--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="197" x="1045.5" y="1098.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="177" x="1055.5" y="1121.7344">Callout leases4_committed</text><path d="M1277.5,1103.6992 L1277.5,1112.1992 L1242.75,1116.1992 L1277.5,1120.1992 L1277.5,1129.0098 A0,0 0 0 0 1277.5,1129.0098 L1330.5,1129.0098 A0,0 0 0 0 1330.5,1129.0098 L1330.5,1113.6992 L1320.5,1103.6992 L1277.5,1103.6992 A0,0 0 0 0 1277.5,1103.6992 " fill="#FBFB77" filter="url(#f1u1c8b25aigi3)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1320.5,1103.6992 L1320.5,1113.6992 L1330.5,1113.6992 L1320.5,1103.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="1283.5" y="1121.2676">hook</text><!--MD5=[8e18f13991ca58e5a79e0b81ed56b9db] +entity park--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="50" x="1119" y="1211.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="30" x="1129" y="1234.7344">Park</text><!--MD5=[145fde1089ff11319f35031b66a8b2bf] +entity pkt4_send--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="144" x="943" y="1324.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="124" x="953" y="1347.7344">Callout pkt4_send</text><!--MD5=[62d5b04920c444814fafa1dbf06b35cd] +entity send--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="121" x="1052.5" y="1647.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="101" x="1062.5" y="1670.7344">Send response</text><!--MD5=[5f600c2348a98514851ba709bbd3f597] +entity pack--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="118" x="1077" y="1437.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="98" x="1087" y="1460.7344">Pack response</text><!--MD5=[d6829aa81ee0cd45a2e878b8b13197d5] +entity buffer4_send--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="164" x="1037" y="1534.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="144" x="1047" y="1557.7344">Callout buffer4_send</text><path d="M954.5,1652.6992 L954.5,1678.0098 A0,0 0 0 0 954.5,1678.0098 L1017.5,1678.0098 A0,0 0 0 0 1017.5,1678.0098 L1017.5,1670.6992 L1052.35,1665.1992 L1017.5,1662.6992 L1017.5,1662.6992 L1007.5,1652.6992 L954.5,1652.6992 A0,0 0 0 0 954.5,1652.6992 " fill="#FBFB77" filter="url(#f1u1c8b25aigi3)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1007.5,1652.6992 L1007.5,1662.6992 L1017.5,1662.6992 L1007.5,1652.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="960.5" y="1670.2676">output</text><!--MD5=[c92710f32fe9c293a125fb7e80204a05] +entity drop--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="103" x="912.5" y="1744.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="83" x="922.5" y="1767.7344">Drop packet</text><path d="M826.5,1749.6992 L826.5,1775.0098 A0,0 0 0 0 826.5,1775.0098 L877.5,1775.0098 A0,0 0 0 0 877.5,1775.0098 L877.5,1767.6992 L912.49,1762.1992 L877.5,1759.6992 L877.5,1759.6992 L867.5,1749.6992 L826.5,1749.6992 A0,0 0 0 0 826.5,1749.6992 " fill="#FBFB77" filter="url(#f1u1c8b25aigi3)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M867.5,1749.6992 L867.5,1759.6992 L877.5,1759.6992 L867.5,1749.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="832.5" y="1767.2676">error</text><!--MD5=[9670815d90e482d849702fdd57183fae] +link receivePacket to isServiceEnabled--><path d="M1617,64.6192 C1617,80.1592 1617,102.9792 1617,119.8592 " fill="none" id="receivePacket->isServiceEnabled" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1617,124.8892,1621,115.8892,1617,119.8892,1613,115.8892,1617,124.8892" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[8b6c78e5054b687dbc9e19308d3a0129] +link isServiceEnabled to buffer4_receive--><path d="M1553.43,157.5892 C1459.11,177.4592 1281.88,214.7792 1176.04,237.0792 " fill="none" id="isServiceEnabled->buffer4_receive" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1171.05,238.1292,1180.681,240.1893,1175.9427,237.0992,1179.0329,232.3609,1171.05,238.1292" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="112" x="1386" y="204.7676">service is enabled</text><!--MD5=[228411fb88ef1bcdfe7f19b853e215d2] +link isServiceEnabled to drop--><path d="M1655.3,161.3592 C1689.09,179.3992 1733,211.2992 1733,255.1992 C1733,255.1992 1733,255.1992 1733,1666.1992 C1733,1737.9692 1198.66,1756.0992 1020.81,1760.1492 " fill="none" id="isServiceEnabled->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1015.65,1760.2592,1024.7391,1764.0525,1020.6487,1760.145,1024.5562,1756.0546,1015.65,1760.2592" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="116" x="1734" y="896.7676">service is disabled</text><!--MD5=[939988dada0403ed6d1a4e6924dd7701] +link buffer4_receive to unpack--><path d="M1029.46,274.2992 C956.18,294.9992 833.42,329.6692 759.35,350.5892 " fill="none" id="buffer4_receive->unpack" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="754.1,352.0692,763.8515,353.4505,758.9087,350.6994,761.6598,345.7566,754.1,352.0692" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="67" x="918" y="317.7676">CONTINUE</text><!--MD5=[02f70f5bfef59fd4c02228f0fd276994] +link buffer4_receive to classify--><path d="M1066.12,274.4492 C1047.04,287.8992 1019.38,306.6792 994,321.1992 C907.16,370.8892 800.63,419.7792 741.66,445.8492 " fill="none" id="buffer4_receive->classify" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="736.8,447.9892,746.6488,448.032,741.3778,445.9784,743.4314,440.7075,736.8,447.9892" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="26" x="940" y="374.2676">SKIP</text><!--MD5=[41e6595d93b5d76e06ef1219c230b624] +link buffer4_receive to drop--><path d="M1179.77,272.9392 C1336.38,300.6992 1643,356.5292 1643,368.1992 C1643,368.1992 1643,368.1992 1643,1666.1992 C1643,1728.8292 1184.07,1752.6892 1020.81,1759.1992 " fill="none" id="buffer4_receive->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1015.59,1759.3992,1024.7431,1763.0353,1020.586,1759.1988,1024.4224,1755.0417,1015.59,1759.3992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="35" x="1644" y="990.2676">DROP</text><!--MD5=[1ecae68ae42d9a73e40e9217f03f9ce7] +link unpack to classify--><path d="M697,387.6192 C697,403.1592 697,425.9792 697,442.8592 " fill="none" id="unpack->classify" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="697,447.8892,701,438.8892,697,442.8892,693,438.8892,697,447.8892" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[27fcba0ca5551c2a3eff6088113b3400] +link unpack to drop--><path d="M639.86,372.0692 C474.31,378.2592 6,401.3992 6,465.1992 C6,465.1992 6,465.1992 6,1666.1992 C6,1765.3592 797.05,1728.7492 895,1744.1992 C898.94,1744.8192 902.99,1745.5592 907.05,1746.3692 " fill="none" id="unpack->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="912.2,1747.4292,904.201,1741.6833,907.3044,1746.4129,902.5748,1749.5163,912.2,1747.4292" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="50" x="7" y="1064.7676">on error</text><!--MD5=[6d44324a94e4b11142830ec71aa81556] +link classify to pkt4_receive--><path d="M667.48,484.3992 C639.44,500.7492 597.31,525.2992 567.9,542.4392 " fill="none" id="classify->pkt4_receive" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="563.3,545.1192,573.0915,544.0576,567.6235,542.6079,569.0733,537.1399,563.3,545.1192" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[0057d53684278b0199141f1c920049f3] +link pkt4_receive to drop_class--><path d="M499.2,581.2692 C481.2,590.1392 458.89,601.1892 439,611.1992 C409.58,626.0092 376.4,643.0092 351.62,655.7692 " fill="none" id="pkt4_receive->drop_class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="347.1,658.0992,356.9329,657.5388,351.5461,655.8118,353.2731,650.425,347.1,658.0992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="67" x="440" y="624.7676">CONTINUE</text><!--MD5=[23d76d484a8ade2f68bc32d339275e55] +link pkt4_receive to drop--><path d="M534,581.4992 C534,603.3392 534,642.0492 534,675.1992 C534,675.1992 534,675.1992 534,1666.1992 C534,1687.5792 558.43,1677.3692 579,1683.1992 C716.63,1722.1692 755.29,1713.5292 895,1744.1992 C899.07,1745.0892 903.27,1746.0492 907.49,1747.0292 " fill="none" id="pkt4_receive->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="912.45,1748.1992,904.6015,1742.2493,907.5822,1747.0572,902.7743,1750.0379,912.45,1748.1992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="35" x="535" y="1177.7676">DROP</text><!--MD5=[2ba86aae9fb469d61f9b8011ebc0bd96] +link drop_class to same_client--><path d="M314,694.6192 C314,710.1592 314,732.9792 314,749.8592 " fill="none" id="drop_class->same_client" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="314,754.8892,318,745.8892,314,749.8892,310,745.8892,314,754.8892" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[4eef49efa4e6a39b9cad1f9dd4db75c9] +link drop_class to drop--><path d="M243.48,679.2592 C179.13,685.3592 94,705.9492 94,772.1992 C94,772.1992 94,772.1992 94,1666.1992 C94,1720.9492 161.68,1676.3392 216,1683.1992 C337.59,1698.5492 367.98,1702.7792 490,1714.1992 C669.71,1731.0192 716.75,1715.8392 895,1744.1992 C898.94,1744.8292 902.99,1745.5692 907.05,1746.3792 " fill="none" id="drop_class->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="912.2,1747.4492,904.1976,1741.708,907.3038,1746.4357,902.576,1749.5419,912.2,1747.4492" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="126" x="95" y="1234.2676">query in DROP class</text><!--MD5=[bb9b361438ecdeec2ed5ec34799fad2e] +link same_client to process--><path d="M347.12,791.2092 C395.425,816.0092 488.31,863.6992 569.655,905.4642 C610.3275,926.3467 648.115,945.748 676.0025,960.0661 C689.9463,967.2252 701.415,973.1134 709.5319,977.2807 C711.5611,978.3225 713.3808,979.2568 714.9774,980.0764 " fill="none" id="same_client->process" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="714.9774,980.0764,708.7978,972.4075,710.5293,977.7928,705.144,979.5244,714.9774,980.0764" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[2de62570b816e5df0f82700c4b296cc3] +link same_client to drop--><path d="M299.7,791.2592 C288.57,806.3092 275,829.3392 275,852.1992 C275,852.1992 275,852.1992 275,1173.6992 C275,1222.3992 247.11,1229.1792 239,1277.1992 C237.74,1284.6492 238.76,1286.6492 239,1294.1992 C239.67,1315.1192 242,1320.2692 242,1341.1992 C242,1341.1992 242,1341.1992 242,1666.1992 C242,1713.3692 777.64,1725.3292 895,1744.1992 C898.94,1744.8292 902.99,1745.5792 907.05,1746.3992 " fill="none" id="same_client->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="912.19,1747.4692,904.2071,1741.7009,907.2973,1746.4392,902.559,1749.5293,912.19,1747.4692" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="267" x="240" y="1290.7676">queries from the same client possible race</text><!--MD5=[3640933a3eded42de606c73d1c2efb26] +link process to drop--><path d="M714.7345,990.1215 C714.4884,990.2441 714.2376,990.3695 713.9823,990.4976 C712.9607,991.0103 711.8653,991.5676 710.703,992.1686 C708.3783,993.3708 705.7858,994.7482 702.9805,996.2952 C691.7591,1002.483 677.1319,1011.383 662.6163,1022.6242 C633.585,1045.1067 605,1076.9542 605,1115.1992 C605,1115.1992 605,1115.1992 605,1286.6992 C605,1382.9192 605,1406.9792 605,1503.1992 C605,1503.1992 605,1503.1992 605,1666.1992 C605,1670.0592 805.92,1721.3092 907.14,1746.8892 " fill="none" id="process->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="912.18,1748.1592,904.4231,1742.0904,907.3301,1746.9432,902.4774,1749.8502,912.18,1748.1592" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="148" x="606" y="1403.7676">unknown message type</text><!--MD5=[952846e6e065ca3396c39be4d5d60980] +link processDiscover to leases4_committed--><path d="M1153.54,1003.3292 C1151.58,1026.3592 1148.08,1067.3592 1145.91,1092.8192 " fill="none" id="processDiscover->leases4_committed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1145.47,1097.9992,1150.2261,1089.3749,1145.8982,1093.0176,1142.2555,1088.6897,1145.47,1097.9992" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7f61b5f2e024f0ea6329d761794804a2] +link processDiscover to drop--><path d="M1178.66,1003.2492 C1195.43,1015.0392 1218.66,1030.7692 1240,1043.1992 C1301.84,1079.1992 1384,1043.6492 1384,1115.1992 C1384,1115.1992 1384,1115.1992 1384,1343.1992 C1384,1405.5792 1346.5,1559.4192 1323,1617.1992 C1310.64,1647.5792 1313.41,1660.2292 1290,1683.1992 C1252.31,1720.1992 1104.17,1743.9392 1021.16,1754.6292 " fill="none" id="processDiscover->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1015.79,1755.3092,1025.2217,1758.1453,1020.7503,1754.6802,1024.2153,1750.2088,1015.79,1755.3092" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="50" x="1380" y="1403.7676">on error</text><!--MD5=[f46ab6743faf3720230dd3ca9adf25a5] +link processRequest to leases4_committed--><path d="M845.36,1003.3592 C861.72,1015.8092 885.26,1032.3292 908,1043.1992 C957.4,1066.8292 1016.32,1084.8192 1062.92,1096.8992 " fill="none" id="processRequest->leases4_committed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1067.97,1098.1992,1060.2468,1092.0875,1063.1269,1096.9563,1058.2582,1099.8364,1067.97,1098.1992" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[46780bcbdce00599e22cc2808afc4298] +link processRequest to drop--><path d="M814.47,1003.5592 C802.08,1027.7992 782,1073.5092 782,1115.1992 C782,1115.1992 782,1115.1992 782,1343.1992 C782,1504.6592 842.57,1536.4892 910,1683.1992 C916.56,1697.4792 918.33,1701.0892 927,1714.1992 C932.7,1722.8192 939.57,1731.8492 945.83,1739.6592 " fill="none" id="processRequest->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="949.23,1743.8592,946.6802,1734.3461,946.0857,1739.9717,940.4601,1739.3771,949.23,1743.8592" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="50" x="786" y="1403.7676">on error</text><!--MD5=[dd5280f7a4fbe519a789693377d2c3dc] +link processRelease to leases4_committed--><path d="M1009.58,1003.3292 C1037.95,1026.9392 1089.01,1069.4292 1119.37,1094.6992 " fill="none" id="processRelease->leases4_committed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1123.33,1097.9992,1118.9735,1089.1663,1119.4877,1094.7997,1113.8543,1095.3139,1123.33,1097.9992" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[9c1ccee308c843163ae9c7fab5373c87] +link processRelease to drop--><path d="M958.18,1003.1992 C924.12,1024.5192 874,1064.4892 874,1115.1992 C874,1115.1992 874,1115.1992 874,1343.1992 C874,1496.1392 893.83,1533.8992 927,1683.1992 C930.11,1697.2092 930.28,1701.0392 936,1714.1992 C939.7,1722.7092 944.65,1731.5692 949.37,1739.2792 " fill="none" id="processRelease->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="952.26,1743.9092,950.8732,1734.1585,949.6062,1739.6716,944.093,1738.4046,952.26,1743.9092" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="50" x="876" y="1403.7676">on error</text><!--MD5=[762f153a4fd6a7efd08d553c7afbf530] +link processDecline to leases4_committed--><path d="M1296.63,1003.3292 C1264.28,1027.0392 1205.97,1069.7792 1171.54,1095.0092 " fill="none" id="processDecline->leases4_committed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1167.47,1097.9992,1177.0921,1095.8981,1171.5007,1095.0405,1172.3582,1089.4491,1167.47,1097.9992" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[6d9fbe084438a9903d341665e19467c6] +link processDecline to drop--><path d="M1344.72,1003.4392 C1388.71,1034.5392 1476,1098.3692 1476,1115.1992 C1476,1115.1992 1476,1115.1992 1476,1666.1992 C1476,1712.0592 1154.4,1744.8992 1020.96,1756.5492 " fill="none" id="processDecline->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1015.91,1756.9892,1025.2195,1760.2037,1020.8916,1756.561,1024.5344,1752.2331,1015.91,1756.9892" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="50" x="1477" y="1403.7676">on error</text><!--MD5=[403b2bcd25ba6f5a11641c975fae6de0] +link processInform to leases4_committed--><path d="M1459.75,1003.3292 C1444.69,1015.9292 1422.73,1032.6492 1401,1043.1992 C1350.13,1067.9092 1289.34,1085.4192 1239.66,1096.9892 " fill="none" id="processInform->leases4_committed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1234.58,1098.1592,1244.2506,1100.0248,1239.451,1097.0307,1242.445,1092.2312,1234.58,1098.1592" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[c5223c78dfc731d8a0b6dd3ad2587a32] +link processInform to drop--><path d="M1501,1003.2392 C1527.36,1025.7692 1568,1068.1292 1568,1115.1992 C1568,1115.1992 1568,1115.1992 1568,1666.1992 C1568,1721.2392 1171.5,1749.4592 1021.01,1758.1792 " fill="none" id="processInform->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1015.76,1758.4792,1024.9741,1761.9578,1020.7518,1758.1932,1024.5164,1753.9709,1015.76,1758.4792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="50" x="1569" y="1403.7676">on error</text><!--MD5=[887612e1a41deb0055e6b261cad7b207] +link leases4_committed to pkt4_send--><path d="M1113.34,1134.3192 C1087.4,1150.5592 1051.56,1177.4592 1033,1211.1992 C1014.26,1245.2592 1012.51,1291.6692 1013.42,1318.8292 " fill="none" id="leases4_committed->pkt4_send" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1013.63,1323.9992,1017.2398,1314.8358,1013.4153,1319.0038,1009.2472,1315.1793,1013.63,1323.9992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="67" x="1034" y="1234.2676">CONTINUE</text><!--MD5=[03d4f1b76350f6f230f27d5a69f4e552] +link leases4_committed to drop--><path d="M1215.67,1134.3092 C1261.73,1150.0592 1313,1178.6992 1313,1228.1992 C1313,1228.1992 1313,1228.1992 1313,1399.6992 C1313,1528.5792 1332.51,1582.5492 1252,1683.1992 C1223.32,1719.0492 1096.3,1742.6492 1020.86,1753.7692 " fill="none" id="leases4_committed->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1015.52,1754.5492,1025.0071,1757.1941,1020.4666,1753.8201,1023.8405,1749.2796,1015.52,1754.5492" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="35" x="1315" y="1460.2676">DROP</text><!--MD5=[e6b479318b22374427e5a12769813441] +link leases4_committed to park--><path d="M1144,1134.5392 C1144,1153.7692 1144,1184.8292 1144,1205.8592 " fill="none" id="leases4_committed->park" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1144,1210.9792,1148,1201.9792,1144,1205.9792,1140,1201.9792,1144,1210.9792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="32" x="1145" y="1177.7676">PARK</text><!--MD5=[6b0b05ab5b5e01054aa0e3030e86c15b] +link park to pkt4_send--><path d="M1124.13,1247.2992 C1101.18,1267.0392 1063.46,1299.4992 1038.93,1320.6092 " fill="none" id="park->pkt4_send" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="1035.11,1323.8992,1044.5412,1321.0616,1038.9002,1320.6382,1039.3236,1314.9972,1035.11,1323.8992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="44" x="1088" y="1290.7676">unpark</text><!--MD5=[e1e7c40ae99ae9db4be329f6b3cb143f] +link pkt4_send to pack--><path d="M1033.64,1360.2992 C1055.07,1379.9592 1090.25,1412.2292 1113.27,1433.3492 " fill="none" id="pkt4_send->pack" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1117.14,1436.8992,1113.218,1427.8649,1113.4578,1433.5167,1107.806,1433.7565,1117.14,1436.8992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="67" x="1083" y="1403.7676">CONTINUE</text><!--MD5=[729fab78839d14d65a522c939ef9b552] +link pkt4_send to buffer4_send--><path d="M1013.6,1360.3192 C1012.24,1386.3092 1012.69,1436.5492 1032,1473.1992 C1044.57,1497.0592 1067.55,1517.1692 1086.73,1530.9992 " fill="none" id="pkt4_send->buffer4_send" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1091.02,1534.0292,1085.9763,1525.5698,1086.936,1531.1447,1081.3611,1532.1043,1091.02,1534.0292" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="26" x="1033" y="1460.2676">SKIP</text><!--MD5=[7a343c005ca5222349b93a374f6aa4be] +link pkt4_send to drop--><path d="M1008.96,1360.3792 C993.2,1406.2292 951.09,1535.5692 937,1647.1992 C935,1663.0692 934.35,1667.4192 937,1683.1992 C940.27,1702.6292 947.81,1723.6792 954.1,1739.0092 " fill="none" id="pkt4_send->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="956.17,1743.9792,956.39,1734.1328,954.2419,1739.3659,949.0087,1737.2179,956.17,1743.9792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="35" x="959" y="1557.2676">DROP</text><!--MD5=[e1b3754cee4214144faeedd0f77d1671] +link pack to buffer4_send--><path d="M1132.88,1473.6192 C1130.1,1489.1592 1126.02,1511.9792 1123,1528.8592 " fill="none" id="pack->buffer4_send" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1122.1,1533.8892,1127.61,1525.7259,1122.973,1528.966,1119.7329,1524.3291,1122.1,1533.8892" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[0fe92c55fb860475c26b6ea914a50894] +link buffer4_send to send--><path d="M1118.06,1570.5392 C1117.02,1589.7692 1115.34,1620.8292 1114.21,1641.8592 " fill="none" id="buffer4_send->send" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1113.93,1646.9792,1118.412,1638.2093,1114.201,1641.9866,1110.4237,1637.7756,1113.93,1646.9792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="67" x="1117" y="1613.7676">CONTINUE</text><!--MD5=[887aa11356841167329c21249679272f] +link buffer4_send to drop--><path d="M1161.34,1570.3192 C1173.8,1577.5792 1185.96,1587.3992 1193,1600.1992 C1201.95,1616.4792 1222.86,1639.9692 1191,1683.1992 C1151.85,1736.3392 1074.24,1753.5792 1020.76,1758.9992 " fill="none" id="buffer4_send->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1015.66,1759.4892,1025.0054,1762.5977,1020.6364,1759.0044,1024.2297,1754.6354,1015.66,1759.4892" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="35" x="1208" y="1670.2676">DROP</text><!--MD5=[6b25e4fe160ab604f67b02c1ded86970] +link send to drop--><text fill="#888888" font-family="sans-serif" font-size="10" lengthAdjust="spacingAndGlyphs" textLength="225" x="809.5" y="1801.3555">dashed arrow means asynchronous processing</text><!--MD5=[3241bf81dfc1d82f66e0faca3c9d8456] +@startuml + +title DHCPv4 packet processing (Kea 1.8.0) + +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 + +agent "Avoid same client race in multi-threaded mode" as same_client +note right : postpone processing or drop + +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 leases4_committed" as leases4_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 - -> same_client +drop_class - - -> drop : query in DROP class +same_client - - -> process +same_client - - -> drop : queries from the same client possible race +process - - -> drop : unknown message type +processDiscover - -> leases4_committed +processDiscover - - -> drop : on error +processRequest - -> leases4_committed +processRequest - - -> drop : on error +processRelease - -> leases4_committed +processRelease - - -> drop : on error +processDecline - -> leases4_committed +processDecline - - -> drop : on error +processInform - -> leases4_committed +processInform - - -> drop : on error +leases4_committed - -> pkt4_send : CONTINUE +leases4_committed - - -> drop : DROP +leases4_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 + +footer dashed arrow means asynchronous processing + +@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> diff --git a/doc/sphinx/uml/packet4.uml b/doc/sphinx/uml/packet4.uml new file mode 100644 index 0000000..15263c7 --- /dev/null +++ b/doc/sphinx/uml/packet4.uml @@ -0,0 +1,92 @@ +@startuml + +title DHCPv4 packet processing (Kea 1.8.0) + +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 + +agent "Avoid same client race in multi-threaded mode" as same_client +note right : postpone processing or drop + +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 leases4_committed" as leases4_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 --> same_client +drop_class ---> drop : query in DROP class +same_client ---> process +same_client ---> drop : queries from the same client possible race +process ---> drop : unknown message type +processDiscover --> leases4_committed +processDiscover ---> drop : on error +processRequest --> leases4_committed +processRequest ---> drop : on error +processRelease --> leases4_committed +processRelease ---> drop : on error +processDecline --> leases4_committed +processDecline ---> drop : on error +processInform --> leases4_committed +processInform ---> drop : on error +leases4_committed --> pkt4_send : CONTINUE +leases4_committed ---> drop : DROP +leases4_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 + +footer dashed arrow means asynchronous processing + +@enduml diff --git a/doc/sphinx/uml/request4-lease.png b/doc/sphinx/uml/request4-lease.png Binary files differnew file mode 100644 index 0000000..23b95cd --- /dev/null +++ b/doc/sphinx/uml/request4-lease.png diff --git a/doc/sphinx/uml/request4-lease.svg b/doc/sphinx/uml/request4-lease.svg new file mode 100644 index 0000000..28b47de --- /dev/null +++ b/doc/sphinx/uml/request4-lease.svg @@ -0,0 +1,203 @@ +<?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="2399px" preserveAspectRatio="none" style="width:2294px;height:2399px;" version="1.1" viewBox="0 0 2294 2399" width="2294px" zoomAndPan="magnify"><defs><filter height="300%" id="f5oag86dlpmno" 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="399" x="938.5" y="17.4023">Allocate a lease for DHCPREQUEST (Kea 1.8.0)</text><!--MD5=[eaee9025590d004dcfc2daa117adb8bb] +cluster check_hint--><rect fill="#FFFFFF" filter="url(#f5oag86dlpmno)" height="378.72" style="stroke: #000000; stroke-width: 1.5;" width="939" x="950" y="248.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="180" x="1329.5" y="263.7344">Check requested address</text><!--MD5=[c6fdc214782d2c6b530af6f84e869950] +cluster get_existing--><rect fill="#FFFFFF" filter="url(#f5oag86dlpmno)" height="164.86" style="stroke: #000000; stroke-width: 1.5;" width="245" x="1604" y="347.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="229" x="1612" y="362.5944">Get lease for requested address</text><!--MD5=[57e960cb4db100c9a2ccd6f4d6705f05] +cluster check_done--><rect fill="#FFFFFF" filter="url(#f5oag86dlpmno)" height="164.86" style="stroke: #000000; stroke-width: 1.5;" width="161" x="470" y="691.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="130" x="485.5" y="707.4544">Check client lease</text><!--MD5=[a6e23b86b5ec2c7080f88f7cf966373c] +cluster new_lease--><rect fill="#FFFFFF" filter="url(#f5oag86dlpmno)" height="1385.08" style="stroke: #000000; stroke-width: 1.5;" width="1138" x="7" y="905.7792"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="147" x="502.5" y="921.3144">Allocate a new lease</text><!--MD5=[c0a0058b985d9500e1903c17b16df914] +cluster allocateOrReuseLease4--><rect fill="#FFFFFF" filter="url(#f5oag86dlpmno)" height="685.36" style="stroke: #000000; stroke-width: 1.5;" width="300" x="71" y="1466.4992"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="164" x="139" y="1482.0344">Allocate or reuse lease</text><!--MD5=[23478a531f37cd80899cad04cd2b7f18] +cluster allocateUnreservedLease4--><rect fill="#FFFFFF" filter="url(#f5oag86dlpmno)" height="588.22" style="stroke: #000000; stroke-width: 1.5;" width="514" x="411" y="1044.6392"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="184" x="576" y="1060.1744">Allocate unreserved lease</text><!--MD5=[f07ece90dffecaa599052c39e01a94c5] +entity getReservedLease--><rect fill="#FEFECE" filter="url(#f5oag86dlpmno)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="246" x="1136" y="451.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="226" x="1146" y="475.4544">Check lease for reserved address</text><!--MD5=[8636dd2beae72b933abf12250cfd1025] +entity out_of_pool--><rect fill="#FEFECE" filter="url(#f5oag86dlpmno)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="208" x="1020" y="566.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="188" x="1030" y="590.4544">Check out-of-pool address</text><!--MD5=[ec14e8cae259e632e03b8f7e5f2fa627] +entity existing--><rect fill="#FEFECE" filter="url(#f5oag86dlpmno)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="174" x="1651" y="451.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="154" x="1661" y="475.4544">Check requested lease</text><!--MD5=[0edbe06a49914a247f1c11b045d92815] +entity client_lease--><rect fill="#FEFECE" filter="url(#f5oag86dlpmno)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="108" x="494" y="796.7792"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="88" x="504" y="820.3144">Check renew</text><!--MD5=[66e1e431ca0dbea91ea05cb758558585] +entity create--><rect fill="#FEFECE" filter="url(#f5oag86dlpmno)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="148" x="973" y="1703.8592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="128" x="983" y="1727.3944">Create a new lease</text><!--MD5=[a85809bef6165a661ce702016b2b24bf] +entity old_lease--><rect fill="#FEFECE" filter="url(#f5oag86dlpmno)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="128" x="747" y="2230.8592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="108" x="757" y="2254.3944">Delete old lease</text><!--MD5=[3e4eb9e968ddf7eb79447dabaa827d00] +entity candidate--><rect fill="#FEFECE" filter="url(#f5oag86dlpmno)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="153" x="188.5" y="1572.8592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="133" x="198.5" y="1596.3944">Get candidate lease</text><!--MD5=[3dd4b79f11e480f9e62df46d2d0a412b] +entity reuseExpiredLease4--><rect fill="#FEFECE" filter="url(#f5oag86dlpmno)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="157" x="118.5" y="1703.8592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="137" x="128.5" y="1727.3944">Reuse expired lease</text><!--MD5=[7989e4485f5064553517c02d5ce8346d] +entity reclaimExpiredLease--><rect fill="#FEFECE" filter="url(#f5oag86dlpmno)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="169" x="111.5" y="1800.8592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="149" x="121.5" y="1824.3944">Reclaim expired lease</text><!--MD5=[8b161cca1eea0fa2f14429822e5193fc] +entity updateLease4Information--><rect fill="#FEFECE" filter="url(#f5oag86dlpmno)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="192" x="96" y="1897.8592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="172" x="106" y="1921.3944">update lease information</text><!--MD5=[20b997f41be7d019adfd03f05289a85b] +entity lease4_select--><rect fill="#FEFECE" filter="url(#f5oag86dlpmno)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="163" x="95.5" y="1994.8592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="143" x="105.5" y="2018.3944">Callout lease4_select</text><path d="M293.5,2000.3592 L293.5,2008.8592 L258.55,2012.8592 L293.5,2016.8592 L293.5,2025.6698 A0,0 0 0 0 293.5,2025.6698 L346.5,2025.6698 A0,0 0 0 0 346.5,2025.6698 L346.5,2010.3592 L336.5,2000.3592 L293.5,2000.3592 A0,0 0 0 0 293.5,2000.3592 " fill="#FBFB77" filter="url(#f5oag86dlpmno)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M336.5,2000.3592 L336.5,2010.3592 L346.5,2010.3592 L336.5,2000.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="2017.9276">hook</text><!--MD5=[d0c6f6a5b1ca3e5ac503933fbe44aaa9] +entity updateLease4--><rect fill="#FEFECE" filter="url(#f5oag86dlpmno)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="108" x="210" y="2091.8592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="88" x="220" y="2115.3944">Update lease</text><!--MD5=[8ae068fcc4f60e406016be9ba14134ac] +entity iterate--><rect fill="#FEFECE" filter="url(#f5oag86dlpmno)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="194" x="450" y="1133.4992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="174" x="460" y="1157.0344">Iterate pools and subnets</text><!--MD5=[cb628e8ea2f367fa2f488bc44b336c46] +entity pick--><rect fill="#FEFECE" filter="url(#f5oag86dlpmno)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="105" x="509.5" y="1246.4992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="85" x="519.5" y="1270.0344">Pick address</text><!--MD5=[3307242102673314e57f67fe596f1a7c] +entity pick_reserved--><rect fill="#FEFECE" filter="url(#f5oag86dlpmno)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="200" x="640" y="1359.4992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="180" x="650" y="1383.0344">Check reserved addressed</text><!--MD5=[ac311a8dd9b9ea9d39416a955479a4fe] +entity mt_in_use--><rect fill="#FEFECE" filter="url(#f5oag86dlpmno)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="288" x="506" y="1475.8592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="268" x="516" y="1499.3944">Check already in use by another thread</text><!--MD5=[3fa202f6559a381d70247672876b819e] +entity pick_lease--><rect fill="#FEFECE" filter="url(#f5oag86dlpmno)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="101" x="476.5" y="1572.8592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="81" x="486.5" y="1596.3944">Check lease</text><!--MD5=[1213eaa42773f0ba0384c538d3efa224] +entity findClientLease--><rect fill="#FEFECE" filter="url(#f5oag86dlpmno)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="130" x="1383" y="28.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="110" x="1393" y="51.7344">Find client lease</text><path d="M1548,33.6992 L1548,42.1992 L1513.14,46.1992 L1548,50.1992 L1548,59.0098 A0,0 0 0 0 1548,59.0098 L1638,59.0098 A0,0 0 0 0 1638,59.0098 L1638,43.6992 L1628,33.6992 L1548,33.6992 A0,0 0 0 0 1548,33.6992 " fill="#FBFB77" filter="url(#f5oag86dlpmno)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1628,33.6992 L1628,43.6992 L1638,43.6992 L1628,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="1554" y="51.2676">entry point</text><!--MD5=[0f69bb3143e68c3e4ebf8b928e2a1af4] +entity addressReserved--><rect fill="#FEFECE" filter="url(#f5oag86dlpmno)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="216" x="1615" y="141.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="196" x="1625" y="164.7344">Check requested reservation</text><!--MD5=[f1bd864ca92b3a59ad91e15b6c278a16] +entity hasAddressReservation--><rect fill="#FEFECE" filter="url(#f5oag86dlpmno)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="124" x="1112" y="141.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="104" x="1122" y="164.7344">Get reservation</text><!--MD5=[29cbf9a69668994ea4ff4bb0b8dea6d6] +entity update_hint--><rect fill="#FEFECE" filter="url(#f5oag86dlpmno)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="200" x="1380" y="141.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="180" x="1390" y="164.7344">Update requested address</text><!--MD5=[999fe650e2a9819ebed27de3d290658a] +entity no_lease--><rect fill="#FEFECE" filter="url(#f5oag86dlpmno)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="127" x="1444.5" y="2230.8592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="107" x="1454.5" y="2254.3944">Return no lease</text><path d="M1607,2236.3592 L1607,2244.8592 L1571.71,2248.8592 L1607,2252.8592 L1607,2261.6698 A0,0 0 0 0 1607,2261.6698 L1689,2261.6698 A0,0 0 0 0 1689,2261.6698 L1689,2246.3592 L1679,2236.3592 L1607,2236.3592 A0,0 0 0 0 1607,2236.3592 " fill="#FBFB77" filter="url(#f5oag86dlpmno)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1679,2236.3592 L1679,2246.3592 L1689,2246.3592 L1679,2236.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="1613" y="2253.9276">exit point</text><!--MD5=[45b45980895812fee5a3bd80c1953e7a] +entity renew--><rect fill="#FEFECE" filter="url(#f5oag86dlpmno)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="168" x="971" y="796.7792"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="148" x="981" y="820.3144">Return renewed lease</text><path d="M1174,802.2792 L1174,810.7792 L1139.06,814.7792 L1174,818.7792 L1174,827.5898 A0,0 0 0 0 1174,827.5898 L1256,827.5898 A0,0 0 0 0 1256,827.5898 L1256,812.2792 L1246,802.2792 L1174,802.2792 A0,0 0 0 0 1174,802.2792 " fill="#FBFB77" filter="url(#f5oag86dlpmno)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1246,802.2792 L1246,812.2792 L1256,812.2792 L1246,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="1180" y="819.8476">exit point</text><!--MD5=[c13398c59c328d6fcc544c8c17f5b117] +entity return--><rect fill="#FEFECE" filter="url(#f5oag86dlpmno)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="105" x="758.5" y="2345.8592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="85" x="768.5" y="2369.3944">Return lease</text><path d="M899,2351.3592 L899,2359.8592 L863.66,2363.8592 L899,2367.8592 L899,2376.6698 A0,0 0 0 0 899,2376.6698 L981,2376.6698 A0,0 0 0 0 981,2376.6698 L981,2361.3592 L971,2351.3592 L899,2351.3592 A0,0 0 0 0 899,2351.3592 " fill="#FBFB77" filter="url(#f5oag86dlpmno)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M971,2351.3592 L971,2361.3592 L981,2361.3592 L971,2351.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="905" y="2368.9276">exit point</text><!--MD5=[58c45ac03f61bca16a2604d1f9090edc] +link findClientLease to addressReserved--><path d="M1490.37,64.2992 C1540.43,84.5092 1623.49,118.0392 1675.64,139.0792 " fill="none" id="findClientLease->addressReserved" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1680.59,141.0792,1673.7456,133.9973,1675.9546,139.205,1670.7468,141.414,1680.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="1602" y="107.7676">has requested address (hint)</text><!--MD5=[3ed98210a29f20764b03cb44cfd671eb] +link findClientLease to hasAddressReservation--><path d="M1405.79,64.2992 C1355.91,84.5092 1273.15,118.0392 1221.19,139.0792 " fill="none" id="findClientLease->hasAddressReservation" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1216.26,141.0792,1226.1032,141.414,1220.8954,139.205,1223.1044,133.9973,1216.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="1328" y="107.7676">no requested address (hint)</text><!--MD5=[0f8169b991248aaf1e86d3e126ee7fc7] +link addressReserved to check_hint--><path d="M1706.14,177.5692 C1690.855,193.3142 1667.81,217.0567 1648.3475,237.1092 C1645.9147,239.6158 1643.5379,242.0647 1641.2391,244.4331 C1640.0898,245.6173 1638.96,246.7814 1637.8525,247.9225 " fill="none" id="addressReserved->check_hint" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1637.8525,247.9225,1646.991,244.2501,1641.3348,244.3346,1641.2503,238.6783,1637.8525,247.9225" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="162" x="1675" y="220.7676">no conflicting reservation</text><!--MD5=[afeb447a9f6636bece5d73dd5d09cefa] +link addressReserved to no_lease--><path d="M1831.12,176.2492 C1928.35,193.8192 2056,226.1192 2056,274.5592 C2056,274.5592 2056,274.5592 2056,2110.8592 C2056,2245.5392 1894.72,2159.4592 1764,2191.8592 C1729.14,2200.4992 1639.9,2219.7792 1576.62,2233.2992 " fill="none" id="addressReserved->no_lease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1571.73,2234.3392,1581.3655,2236.3781,1576.6205,2233.2984,1579.7002,2228.5534,1571.73,2234.3392" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="225" x="2057" y="1213.0676">reservation owned by another client</text><!--MD5=[961d5a31619e7d456669487d013a1899] +link hasAddressReservation to update_hint--><path d="M1236.29,159.1992 C1276.08,159.1992 1328.68,159.1992 1374.83,159.1992 " fill="none" id="hasAddressReservation->update_hint" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1379.85,159.1992,1370.85,155.1992,1374.85,159.1992,1370.85,163.1992,1379.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="1254.5" y="152.7676">has a reservation</text><!--MD5=[05586e2e35799af932c772159165fde5] +link update_hint to check_hint--><path d="M1480.56,177.2992 C1481.87,191.3892 1485.77,211.1092 1497,224.1992 C1501.4688,229.4105 1506.5789,234.1017 1512.105,238.322 C1514.868,240.4322 1517.735,242.4246 1520.6778,244.3054 C1522.1492,245.2458 1523.6395,246.1583 1525.1453,247.0437 C1525.5217,247.2651 1525.8991,247.4847 1526.2774,247.7027 C1526.4666,247.8117 1526.656,247.9202 1526.8456,248.0284 " fill="none" id="update_hint->check_hint" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1526.8456,248.0284,1521.0095,240.0949,1522.5024,245.5512,1517.046,247.044,1526.8456,248.0284" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="157" x="1498" y="220.7676">request reserved address</text><!--MD5=[f5740591afdec92972eb12364704fbda] +link hasAddressReservation to check_done--><path d="M1111.78,160.2292 C968.42,161.9792 627,176.4492 627,274.5592 C627,274.5592 627,274.5592 627,585.9192 C627,614.8842 626.03,647.4017 625.045,672.958 C624.7987,679.347 624.5516,685.301 624.3184,690.6556 C624.3038,690.9903 624.2893,691.3226 624.2748,691.6526 " fill="none" id="hasAddressReservation->check_done" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="624.2748,691.6526,628.6651,682.8364,624.4938,686.6574,620.6728,682.486,624.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="628" y="418.4876">no reservation</text><!--MD5=[05b1cca34cf1798b13fb9b06f5ca5f3a] +link check_hint to get_existing--><path d="M1612,276.1292 C1612,277.5792 1612,301.1692 1612,324.7542 C1612,330.6505 1612,336.5464 1612,342.096 C1612,343.4834 1612,344.8492 1612,346.1879 C1612,346.3552 1612,346.5221 1612,346.6886 " fill="none" id="check_hint->get_existing" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1612,346.6886,1616,337.6886,1612,341.6886,1608,337.6886,1612,346.6886" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[a6e7bc949cef76964a3dcada3d94e736] +link get_existing to existing--><path d="M1612.09,374.9892 C1614.74,376.9592 1674.43,421.4892 1710.66,448.5192 " fill="none" id="get_existing->existing" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1714.95,451.7292,1710.1157,443.1485,1710.938,448.7452,1705.3413,449.5676,1714.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="1676" y="418.4876">has requested lease</text><!--MD5=[86bae6c5db5c6e2b2f64eec8702a172a] +link existing to no_lease--><path d="M1738,488.1492 C1738,510.3092 1738,549.9792 1738,583.9192 C1738,583.9192 1738,583.9192 1738,2110.8592 C1738,2169.0192 1692.68,2170.6192 1643,2200.8592 C1622.7,2213.2092 1598.7,2222.8992 1576.6,2230.1892 " fill="none" id="existing->no_lease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1571.62,2231.7992,1581.415,2232.8276,1576.3761,2230.2567,1578.947,2225.2178,1571.62,2231.7992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="263" x="1739" y="1382.5676">not expired lease owned by another client</text><!--MD5=[d1913c1ad5468c4f26e27e58c8f67311] +link get_existing to out_of_pool--><path d="M1603.5702,375.107 C1603.282,375.1139 1602.9868,375.1209 1602.6847,375.1282 C1602.0805,375.1427 1601.4485,375.158 1600.7892,375.1741 C1599.4706,375.2063 1598.043,375.2417 1596.5101,375.2804 C1593.4444,375.3579 1589.9579,375.4487 1586.0818,375.5535 C1570.5772,375.973 1548.8378,376.6183 1522.855,377.543 C1470.8894,379.3923 1401.95,382.3592 1331.9675,386.8717 C1192.0025,395.8967 1047.865,411.1042 1027,435.9192 C1000.68,467.2192 1006.56,492.5092 1027,527.9192 C1036.33,544.0792 1052.3,555.9992 1068.62,564.5792 " fill="none" id="get_existing->out_of_pool" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1073.22,566.9092,1066.998,559.2747,1068.7594,564.6503,1063.3837,566.4117,1073.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="1028" y="474.9876">no reservation</text><!--MD5=[d1913c1ad5468c4f26e27e58c8f67311] +link get_existing to out_of_pool--><path d="M1603.8377,376.8955 C1603.4057,377.006 1602.9584,377.1212 1602.4962,377.2411 C1600.6472,377.7206 1598.5597,378.2751 1596.2617,378.9056 C1587.0697,381.4277 1574.5094,385.1648 1560.3738,390.173 C1532.1025,400.1892 1497.53,415.2892 1471,435.9192 C1430.23,467.6192 1443.85,500.6192 1400,527.9192 C1350.34,558.8392 1286.82,573.0892 1233.23,579.4992 " fill="none" id="get_existing->out_of_pool-1" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1228.08,580.0892,1237.4862,583.0087,1233.0457,579.5042,1236.5502,575.0636,1228.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="1472" y="474.9876">has requested reservation</text><!--MD5=[a80af0ff9802cb26b63fe0e5cdeeb896] +link get_existing to getReservedLease--><path d="M1603.7999,374.8934 C1603.5697,374.893 1603.3349,374.8927 1603.0956,374.8923 C1602.6171,374.8916 1602.1205,374.891 1601.6064,374.8904 C1599.5497,374.8882 1597.2106,374.8875 1594.61,374.8892 C1584.2075,374.8962 1569.6199,374.9436 1552.1798,375.1011 C1517.2997,375.4161 1471.0094,376.1717 1423.9688,377.9267 C1329.8875,381.4367 1232.805,388.9442 1218,404.9192 C1205.95,417.9192 1217.84,434.9092 1231.87,448.1092 " fill="none" id="get_existing->getReservedLease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1235.86,451.7292,1231.8826,442.7192,1232.1571,448.3694,1226.5069,448.6439,1235.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="1219" y="418.4876">has reservation for another address</text><!--MD5=[460f9433d097e6134b488e2edc059749] +link getReservedLease to no_lease--><path d="M1298.31,487.9392 C1370.31,519.1292 1516,582.4492 1516,583.9192 C1516,583.9192 1516,583.9192 1516,1321.9992 C1516,1356.7992 1520.59,1368.8792 1543,1395.4992 C1560.18,1415.9092 1578.19,1404.7792 1595,1425.4992 C1614.84,1449.9592 1617,1461.3692 1617,1492.8592 C1617,1492.8592 1617,1492.8592 1617,2110.8592 C1617,2161.3292 1571.14,2203.9592 1538.92,2227.6992 " fill="none" id="getReservedLease->no_lease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1534.66,2230.7792,1544.2952,2228.7389,1538.7092,2227.846,1539.6021,2222.2601,1534.66,2230.7792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="150" x="1544" y="1382.5676">no active reserved lease</text><!--MD5=[e9bc3bd5a379396c200e43b0baf79c85] +link getReservedLease to out_of_pool--><path d="M1238.5,488.0792 C1214.41,508.2392 1174.48,541.6692 1148.71,563.2392 " fill="none" id="getReservedLease->out_of_pool" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1144.7,566.5992,1154.1757,563.9139,1148.5423,563.3997,1149.0565,557.7663,1144.7,566.5992" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[e17e653abfe61c21e03d310137f9f5d3] +link out_of_pool to check_done--><path d="M1094.93,603.0392 C1061.57,621.9092 1004.65,651.7292 952,667.9192 C882.41,689.3242 801.6225,701.8592 737.5188,709.0692 C705.4669,712.6742 677.5859,714.948 657.3611,716.3336 C647.2487,717.0264 639.0503,717.4972 633.2015,717.8013 C632.4705,717.8393 631.7761,717.8748 631.1193,717.9077 " fill="none" id="out_of_pool->check_done" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="631.1193,717.9077,640.3082,721.4522,636.113,717.6574,639.9078,713.4622,631.1193,717.9077" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="280" x="997" y="664.4876">owned reservation for the requested address</text><!--MD5=[e17e653abfe61c21e03d310137f9f5d3] +link out_of_pool to check_done--><path d="M1019.57,594.3492 C910.87,604.4092 748.83,623.3992 693,650.9192 C674.24,660.1642 657.23,676.2567 644.6763,690.3942 C641.5378,693.9286 638.6779,697.3408 636.1388,700.4932 C634.8692,702.0695 633.6798,703.5808 632.576,705.0099 C632.3,705.3672 632.0294,705.7194 631.7642,706.0662 C631.6316,706.2395 631.5003,706.4116 631.3705,706.5822 C631.3055,706.6675 631.2409,706.7525 631.1767,706.8371 " fill="none" id="out_of_pool->check_done-1" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="631.1767,706.8371,639.8049,702.088,634.2002,702.8549,633.4333,697.2503,631.1767,706.8371" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="249" x="694" y="664.4876">requested address is in allowed an pool</text><!--MD5=[7bd3c3d867479d62123546af0a0eba34] +link out_of_pool to no_lease--><path d="M1203.74,602.9892 C1232.91,612.7492 1264.1,627.8392 1286,650.9192 C1307.77,673.8692 1309,686.6492 1309,718.2792 C1309,718.2792 1309,718.2792 1306,1434.9992 C1306,1673.5792 1398,1725.2792 1398,1963.8592 C1398,1963.8592 1398,1963.8592 1398,2110.8592 C1398,2161.5092 1444.28,2204.0892 1476.8,2227.7592 " fill="none" id="out_of_pool->no_lease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1481.09,2230.8292,1476.0801,2222.3498,1477.0175,2227.9284,1471.4388,2228.8658,1481.09,2230.8292" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="283" x="1310" y="1439.0676">address not reserved and not in allowed pool</text><!--MD5=[285a75cccafb8a8e1e8a8d054b6bd861] +link check_done to client_lease--><path d="M622.95,719.8492 C621.39,721.7992 586.7,765.2692 565.07,792.3792 " fill="none" id="check_done->client_lease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="561.72,796.5892,570.4617,792.0524,564.84,792.6821,564.2103,787.0604,561.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="600" y="763.3476">has a client lease</text><!--MD5=[69a418bc3ca1e1b953129b8feacd7c7c] +link client_lease to renew--><path d="M602.26,814.7792 C689.18,814.7792 860.52,814.7792 965.69,814.7792 " fill="none" id="client_lease->renew" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="970.96,814.7792,961.96,810.7792,965.96,814.7792,961.96,818.7792,970.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="620.5" y="808.3476">requested address was already assigned to the client</text><!--MD5=[82bd19346130f27c4982b22ea05f0ccb] +link client_lease to new_lease--><path d="M547.85,832.9492 C547.715,848.8792 547.5075,873.1567 547.3313,893.7055 C547.3092,896.2741 547.2877,898.7844 547.2668,901.2129 C547.2564,902.4271 547.2461,903.6209 547.2361,904.7913 C547.2336,905.0839 547.2311,905.375 547.2286,905.6646 " fill="none" id="client_lease->new_lease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="547.2286,905.6646,551.3058,896.6993,547.2715,900.6648,543.3061,896.6306,547.2286,905.6646" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[f19fad7ef643a710f1fa744c146e27e1] +link new_lease to allocateOrReuseLease4--><path d="M546.94,933.6392 C542.11,933.4192 233,919.8692 233,1070.9992 C233,1070.9992 233,1070.9992 233,1378.4992 C233,1403.8242 237.36,1431.9242 241.7888,1453.9317 C242.3423,1456.6827 242.897,1459.3384 243.4444,1461.8816 C243.7181,1463.1532 243.9899,1464.3967 244.2589,1465.6099 C244.2925,1465.7616 244.3261,1465.9127 244.3596,1466.0634 " fill="none" id="new_lease->allocateOrReuseLease4" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="244.3596,1466.0634,246.3094,1456.4095,243.2737,1461.1828,238.5004,1458.147,244.3596,1466.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="1213.0676">has a requested address</text><!--MD5=[1e19bcf55215d199025544543592d337] +link new_lease to allocateUnreservedLease4--><path d="M547,933.7392 C547,935.7842 547,969.0667 547,1002.3417 C547,1010.6605 547,1018.9788 547,1026.8084 C547,1030.7232 547,1034.5158 547,1038.1252 C547,1039.93 547,1041.6889 547,1043.3944 C547,1043.6076 547,1043.8199 547,1044.0314 " fill="none" id="new_lease->allocateUnreservedLease4" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="547,1044.0314,551,1035.0314,547,1039.0314,543,1035.0314,547,1044.0314" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="135" x="548" y="977.2076">no requested address</text><!--MD5=[2c84e3b0a8d19577f3d2d8902e61dda6] +link allocateOrReuseLease4 to candidate--><path d="M251.01,1494.9292 C251.3,1496.8792 257.62,1539.7592 261.66,1567.2092 " fill="none" id="allocateOrReuseLease4->candidate" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="262.44,1572.4792,265.0848,1562.9921,261.7109,1567.5327,257.1703,1564.1587,262.44,1572.4792" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[a5e8e7e456414e548f2004cb6dbe84b6] +link candidate to reuseExpiredLease4--><path d="M255.97,1608.9892 C243.73,1632.2192 221.85,1673.7092 208.46,1699.1092 " fill="none" id="candidate->reuseExpiredLease4" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="206.07,1703.6592,213.799,1697.5549,208.397,1699.2337,206.7181,1693.8317,206.07,1703.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="1670.4276">expired candidate lease</text><!--MD5=[d2a65277aca220a8b88ff33e161a522b] +link candidate to no_lease--><path d="M300.41,1608.9492 C331,1622.7292 376.81,1641.0592 419,1648.8592 C438.61,1652.4892 1119.78,1646.7992 1137,1656.8592 C1165.37,1673.4392 1174,1687.9992 1174,1720.8592 C1174,1720.8592 1174,1720.8592 1174,2110.8592 C1174,2167.7192 1341.77,2212.7992 1439.5,2234.2292 " fill="none" id="candidate->no_lease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1444.39,2235.2992,1436.4557,2229.4642,1439.5061,2234.2282,1434.7421,2237.2785,1444.39,2235.2992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="169" x="1175" y="1920.9276">conflicting candidate lease</text><!--MD5=[7d0ea550df801bc4f2e5d77c4007fd73] +link candidate to create--><path d="M302.78,1608.8892 C333.47,1621.9592 378.19,1639.3492 419,1648.8592 C452.51,1656.6692 461.8,1653.0992 496,1656.8592 C663.96,1675.3392 860.53,1698.5492 967.59,1711.3292 " fill="none" id="candidate->create" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="972.62,1711.9292,964.1641,1706.8797,967.656,1711.3301,963.2056,1714.822,972.62,1711.9292" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="117" x="634" y="1670.4276">no candidate lease</text><!--MD5=[41d477ba3ffb73c8ff7e1f8771a2bc5c] +link reuseExpiredLease4 to reclaimExpiredLease--><path d="M196.82,1740.2792 C196.65,1755.8192 196.41,1778.6392 196.24,1795.5192 " fill="none" id="reuseExpiredLease4->reclaimExpiredLease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="196.18,1800.5492,200.2572,1791.5839,196.223,1795.5494,192.2575,1791.5152,196.18,1800.5492" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[6426546e78ac0ba7440fd3d40f44ede2] +link reclaimExpiredLease to updateLease4Information--><path d="M195.27,1837.2792 C194.61,1852.8192 193.65,1875.6392 192.94,1892.5192 " fill="none" id="reclaimExpiredLease->updateLease4Information" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="192.73,1897.5492,197.0865,1888.7163,192.9298,1892.5532,189.0929,1888.3965,192.73,1897.5492" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[a62828ac2ba9e6deab1d38c41c6a28c7] +link updateLease4Information to lease4_select--><path d="M189.25,1934.2792 C186.8,1949.8192 183.19,1972.6392 180.53,1989.5192 " fill="none" id="updateLease4Information->lease4_select" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="179.73,1994.5492,185.097,1986.2912,180.5172,1989.6116,177.1968,1985.0317,179.73,1994.5492" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[8451cb76573000a7f0f17878defd5d68] +link lease4_select to no_lease--><path d="M256.64,2030.8892 C422.11,2065.8992 815.39,2147.1692 1148,2200.8592 C1249.02,2217.1692 1366.7,2231.6892 1439.28,2240.1392 " fill="none" id="lease4_select->no_lease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1444.43,2240.7392,1435.9456,2235.7377,1439.4627,2240.1683,1435.0321,2243.6853,1444.43,2240.7392" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="26" x="1090" y="2114.9276">SKIP</text><!--MD5=[6d30d4fb129fbbb4308e51704d598b83] +link lease4_select to updateLease4--><path d="M187.75,2031.0092 C194.04,2040.4992 202.41,2052.2792 211,2061.8592 C219.4,2071.2392 229.56,2080.6292 238.73,2088.5292 " fill="none" id="lease4_select->updateLease4" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="242.59,2091.8092,238.3406,2082.9243,238.7867,2088.5635,233.1474,2089.0096,242.59,2091.8092" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[f38e7914af006d3091e34eae716cf611] +link updateLease4 to old_lease--><path d="M271.13,2128.1092 C280.01,2147.2092 297.1,2177.2192 322,2191.8592 C391.49,2232.7292 624.21,2243.7792 741.78,2246.7592 " fill="none" id="updateLease4->old_lease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="746.95,2246.8892,738.0438,2242.6846,741.9513,2246.775,737.8609,2250.6825,746.95,2246.8892" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[9b569e4e69bfc07b8f4591db492d7934] +link allocateUnreservedLease4 to iterate--><path d="M547,1072.5592 C547,1074.0692 547,1105.5792 547,1128.0692 " fill="none" id="allocateUnreservedLease4->iterate" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="547,1133.2792,551,1124.2792,547,1128.2792,543,1124.2792,547,1133.2792" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[913c99c1aa5de4d885de0fade3210176] +link iterate to pick--><path d="M549.34,1169.8392 C551.94,1189.0692 556.14,1220.1292 558.98,1241.1592 " fill="none" id="iterate->pick" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="559.67,1246.2792,562.4258,1236.8238,558.9989,1241.3245,554.4982,1237.8975,559.67,1246.2792" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[98fd2d33f60f8d171595f3ad38490357] +link pick to pick_reserved--><path d="M614.74,1276.6292 C662.69,1287.2492 727.13,1302.9992 735,1312.4992 C744.41,1323.8692 745.43,1340.5992 744.21,1354.0992 " fill="none" id="pick->pick_reserved" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="743.62,1359.2892,748.6002,1350.7923,744.1784,1354.3205,740.6502,1349.8988,743.62,1359.2892" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[40bbb0c51a3c4e170e8c88288f4abbc7] +reverse link iterate to pick_reserved--><path d="M587.85,1171.9592 C635.04,1196.9992 710.25,1245.3892 742,1312.4992 C748.94,1327.1692 747.31,1345.9192 744.63,1359.3292 " fill="none" id="iterate<-pick_reserved" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="583.37,1169.6092,589.4641,1177.3463,587.7924,1171.9421,593.1966,1170.2704,583.37,1169.6092" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="214" x="723" y="1269.5676">address reserved to another client</text><!--MD5=[d452465c31c3e200782285fc87364de7] +link pick_reserved to mt_in_use--><path d="M726.33,1395.8692 C710.31,1416.2192 683.78,1449.9292 666.6,1471.7692 " fill="none" id="pick_reserved->mt_in_use" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="663.5,1475.6992,672.2152,1471.1118,666.5973,1471.7741,665.935,1466.1561,663.5,1475.6992" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[0d2cb4b21f131724b772926f54d8c5a6] +reverse link iterate to mt_in_use--><path d="M525.22,1173.1292 C491.49,1207.6292 434.06,1278.2892 470,1329.4992 C492.53,1361.6092 521.64,1335.9392 553,1359.4992 C595.57,1391.4892 627.49,1447.3892 641.76,1475.5692 " fill="none" id="iterate<-mt_in_use" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="528.81,1169.5092,519.6392,1173.1004,525.296,1173.0661,525.3302,1178.7229,528.81,1169.5092" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="255" x="471" y="1326.0676">address already in use by another thread</text><!--MD5=[bc2a6c320076cde845cfe5f7d4f3068f] +link mt_in_use to pick_lease--><path d="M627.73,1512.0592 C606.74,1528.2692 575.3,1552.5592 553.13,1569.6792 " fill="none" id="mt_in_use->pick_lease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="549.11,1572.7792,558.6776,1570.4423,553.0667,1569.7224,553.7867,1564.1115,549.11,1572.7792" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[2a521ba838ca3ea39c3c98b97230fab1] +reverse link iterate to pick_lease--><path d="M513.37,1172.6092 C502.3,1180.1892 490.42,1189.4392 481,1199.4992 C464.23,1217.4192 458.7,1222.8892 452,1246.4992 C435.76,1303.7492 469.06,1455.4492 488,1511.8592 C495.37,1533.8192 507.86,1557.3892 516.72,1572.7992 " fill="none" id="iterate<-pick_lease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="517.73,1169.6792,508.0294,1171.3818,513.5808,1172.4692,512.4934,1178.0206,517.73,1169.6792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="73" x="461" y="1382.5676">active lease</text><!--MD5=[63357d070723cd23e47a694c7dc5adee] +link pick_lease to reuseExpiredLease4--><path d="M486.46,1608.9192 C461.21,1620.5292 428.75,1637.3192 403,1656.8592 C394.74,1663.1292 395.96,1668.6192 387,1673.8592 C377.25,1679.5592 326.42,1692.0092 279.78,1702.6592 " fill="none" id="pick_lease->reuseExpiredLease4" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="274.7,1703.8192,284.3588,1705.7447,279.5779,1702.721,282.6016,1697.9401,274.7,1703.8192" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="83" x="404" y="1670.4276">expired lease</text><!--MD5=[cf9da26e069a0df2c62fe2799950086c] +link pick_lease to create--><path d="M577.81,1604.4592 C670.26,1627.3992 866.3,1676.0292 973.39,1702.5992 " fill="none" id="pick_lease->create" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="978.42,1703.8492,970.6421,1697.8074,973.5659,1702.65,968.7233,1705.5738,978.42,1703.8492" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="52" x="849" y="1670.4276">no lease</text><!--MD5=[64e111b9225aa9d21cd5edaf123c77e3] +link create to old_lease--><path d="M1027.36,1740.0192 C1009.53,1757.5992 986,1786.6992 986,1817.8592 C986,1817.8592 986,1817.8592 986,2110.8592 C986,2170.8492 921.44,2208.5092 870.75,2228.8292 " fill="none" id="create->old_lease" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="865.89,2230.7392,875.7293,2231.1732,870.5441,2228.9118,872.8055,2223.7267,865.89,2230.7392" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[f504166a5b4bb527b5be2231a925b659] +link old_lease to return--><path d="M811,2267.0192 C811,2286.5992 811,2318.6892 811,2340.2892 " fill="none" id="old_lease->return" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="811,2345.5392,815,2336.5392,811,2340.5392,807,2336.5392,811,2345.5392" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[1b4d46ef90f054326099bee1d7a95d46] +@startuml + +title Allocate a lease for DHCPREQUEST (Kea 1.8.0) + +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 already in use by another thread" as mt_in_use + + 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 : reservation 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 - -> mt_in_use +mt_in_use -up-> iterate : address already in use by another thread +mt_in_use - -> 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 + +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/sphinx/uml/request4-lease.uml b/doc/sphinx/uml/request4-lease.uml new file mode 100644 index 0000000..54f0c81 --- /dev/null +++ b/doc/sphinx/uml/request4-lease.uml @@ -0,0 +1,118 @@ +@startuml + +title Allocate a lease for DHCPREQUEST (Kea 1.8.0) + +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 already in use by another thread" as mt_in_use + + 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 : reservation 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 --> mt_in_use +mt_in_use -up-> iterate : address already in use by another thread +mt_in_use --> 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 diff --git a/doc/sphinx/uml/request4.png b/doc/sphinx/uml/request4.png Binary files differnew file mode 100644 index 0000000..6818c2c --- /dev/null +++ b/doc/sphinx/uml/request4.png diff --git a/doc/sphinx/uml/request4.svg b/doc/sphinx/uml/request4.svg new file mode 100644 index 0000000..527f2ef --- /dev/null +++ b/doc/sphinx/uml/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="f1ilk3q3nd6gdc" 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="326" x="198" y="17.4023">DHCPREQUEST processing (Kea 1.8.0)</text><!--MD5=[638108c05bc1ef8eca3fbd57a1e57fe7] +cluster ack--><rect fill="#FFFFFF" filter="url(#f1ilk3q3nd6gdc)" 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(#f1ilk3q3nd6gdc)" 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(#f1ilk3q3nd6gdc)" 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(#f1ilk3q3nd6gdc)" 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(#f1ilk3q3nd6gdc)" 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(#f1ilk3q3nd6gdc)" 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(#f1ilk3q3nd6gdc)" 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(#f1ilk3q3nd6gdc)" 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(#f1ilk3q3nd6gdc)" 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(#f1ilk3q3nd6gdc)" 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(#f1ilk3q3nd6gdc)" 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(#f1ilk3q3nd6gdc)" 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(#f1ilk3q3nd6gdc)" 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(#f1ilk3q3nd6gdc)" 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(#f1ilk3q3nd6gdc)" 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(#f1ilk3q3nd6gdc)" 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(#f1ilk3q3nd6gdc)" 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(#f1ilk3q3nd6gdc)" 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(#f1ilk3q3nd6gdc)" 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(#f1ilk3q3nd6gdc)" 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(#f1ilk3q3nd6gdc)" 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=[4750f740a763649f6d3712e660b5e97b] +@startuml + +title DHCPREQUEST processing (Kea 1.8.0) + +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/sphinx/uml/request4.uml b/doc/sphinx/uml/request4.uml new file mode 100644 index 0000000..a5878b9 --- /dev/null +++ b/doc/sphinx/uml/request4.uml @@ -0,0 +1,59 @@ +@startuml + +title DHCPREQUEST processing (Kea 1.8.0) + +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/sphinx/uml/requestLease4.png b/doc/sphinx/uml/requestLease4.png Binary files differnew file mode 100644 index 0000000..52ff01f --- /dev/null +++ b/doc/sphinx/uml/requestLease4.png diff --git a/doc/sphinx/uml/requestLease4.svg b/doc/sphinx/uml/requestLease4.svg new file mode 100644 index 0000000..800e77d --- /dev/null +++ b/doc/sphinx/uml/requestLease4.svg @@ -0,0 +1,310 @@ +<?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="2560px" preserveAspectRatio="none" style="width:1579px;height:2560px;" version="1.1" viewBox="0 0 1579 2560" width="1579px" zoomAndPan="magnify"><defs><filter height="300%" id="f1aicqcofdeklm" 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="316" x="630.5" y="27.4023">requestLease4 algorithm (Kea 1.8.0)</text><ellipse cx="631.3125" cy="41.1992" fill="#000000" filter="url(#f1aicqcofdeklm)" rx="10" ry="10" style="stroke: none; stroke-width: 1.0;"/><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="148" x="557.3125" y="71.1992"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="128" x="567.3125" y="92.8008">get lease for the client</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="584.8125,125.332,677.8125,125.332,689.8125,137.332,677.8125,149.332,584.8125,149.332,572.8125,137.332,584.8125,125.332" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="93" x="584.8125" y="141.4893">reserved address</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="554.8125" y="135.0117">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="689.8125" y="135.0117">no</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="229,159.332,329,159.332,341,171.332,329,183.332,229,183.332,217,171.332,229,159.332" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="100" x="229" y="175.4893">requested address</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="203" y="169.0117">no</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="341" y="169.0117">yes</text><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="250" x="11" y="193.332"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="230" x="21" y="214.9336">requested address = reserved address</text><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="107" x="368.5" y="241.8096"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="87" x="378.5" y="263.4111">return no lease</text><ellipse cx="422" cy="321.9424" fill="#FFFFFF" filter="url(#f1aicqcofdeklm)" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="422" cy="321.9424" fill="#000000" rx="6" ry="6" style="stroke: #7F7F7F; stroke-width: 1.0;"/><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="293,193.332,551,193.332,563,205.332,551,217.332,293,217.332,281,205.332,293,193.332" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="426" y="227.9668">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="258" x="293" y="209.4893">requested address is reserved for another client</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="563" y="203.0117">no</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="279,363.4199,291,375.4199,279,387.4199,267,375.4199,279,363.4199" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="107" x="225.5" y="519.375"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="87" x="235.5" y="540.9766">return no lease</text><ellipse cx="279" cy="599.5078" fill="#FFFFFF" filter="url(#f1aicqcofdeklm)" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="279" cy="599.5078" fill="#000000" rx="6" ry="6" style="stroke: #7F7F7F; stroke-width: 1.0;"/><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="186.5,470.8975,371.5,470.8975,383.5,482.8975,371.5,494.8975,186.5,494.8975,174.5,482.8975,186.5,470.8975" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="283" y="505.5322">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="185" x="186.5" y="487.0547">active and owned by another client</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="383.5" y="480.5771">no</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="204.5,422.4199,353.5,422.4199,365.5,434.4199,353.5,446.4199,204.5,446.4199,192.5,434.4199,204.5,422.4199" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="283" y="457.0547">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="149" x="204.5" y="438.5771">lease for requested address</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="365.5" y="432.0996">no</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="279,665.4629,291,677.4629,279,689.4629,267,677.4629,279,665.4629" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="107" x="225.5" y="869.8955"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="87" x="235.5" y="891.4971">return no lease</text><ellipse cx="279" cy="950.0283" fill="#FFFFFF" filter="url(#f1aicqcofdeklm)" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="279" cy="950.0283" fill="#000000" rx="6" ry="6" style="stroke: #7F7F7F; stroke-width: 1.0;"/><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="263.5,821.418,294.5,821.418,306.5,833.418,294.5,845.418,263.5,845.418,251.5,833.418,263.5,821.418" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="283" y="856.0527">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="31" x="263.5" y="837.5752">active</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="306.5" y="831.0977">no</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="204.5,772.9404,353.5,772.9404,365.5,784.9404,353.5,796.9404,204.5,796.9404,192.5,784.9404,204.5,772.9404" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="283" y="807.5752">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="149" x="204.5" y="789.0977">lease for requested address</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="365.5" y="782.6201">no</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="279,1015.9834,291,1027.9834,279,1039.9834,267,1027.9834,279,1015.9834" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="107" x="225.5" y="1123.4609"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="87" x="235.5" y="1145.0625">return no lease</text><ellipse cx="279" cy="1197.6045" fill="#FFFFFF" filter="url(#f1aicqcofdeklm)" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="279" cy="1197.6045" fill="#000000" rx="6" ry="6" style="stroke: #7F7F7F; stroke-width: 1.0;"/><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="187.5,1074.9834,370.5,1074.9834,382.5,1086.9834,370.5,1098.9834,187.5,1098.9834,175.5,1086.9834,187.5,1074.9834" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="283" y="1109.6182">no</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="183" x="187.5" y="1091.1406">requested address in allowed pool</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="382.5" y="1084.6631">yes</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="170.5,724.4629,387.5,724.4629,399.5,736.4629,387.5,748.4629,170.5,748.4629,158.5,736.4629,170.5,724.4629" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="283" y="759.0977">no</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="217" x="170.5" y="740.6201">requested address == reserved address</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="399.5" y="734.1426">yes</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="279,1259.082,291,1271.082,279,1283.082,267,1271.082,279,1259.082" style="stroke: #A80036; stroke-width: 1.5;"/><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="933.625,159.332,1033.625,159.332,1045.625,171.332,1033.625,183.332,933.625,183.332,921.625,171.332,933.625,159.332" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="100" x="933.625" y="175.4893">requested address</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="903.625" y="169.0117">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="1045.625" y="169.0117">no</text><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="107" x="702.5" y="241.8096"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="87" x="712.5" y="263.4111">return no lease</text><ellipse cx="756" cy="321.9424" fill="#FFFFFF" filter="url(#f1aicqcofdeklm)" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="756" cy="321.9424" fill="#000000" rx="6" ry="6" style="stroke: #7F7F7F; stroke-width: 1.0;"/><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="627,193.332,885,193.332,897,205.332,885,217.332,627,217.332,615,205.332,627,193.332" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="760" y="227.9668">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="258" x="627" y="209.4893">requested address is reserved for another client</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="897" y="203.0117">no</text><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="107" x="702.5" y="489.375"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="87" x="712.5" y="510.9766">return no lease</text><ellipse cx="756" cy="569.5078" fill="#FFFFFF" filter="url(#f1aicqcofdeklm)" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="756" cy="569.5078" fill="#000000" rx="6" ry="6" style="stroke: #7F7F7F; stroke-width: 1.0;"/><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="663.5,440.8975,848.5,440.8975,860.5,452.8975,848.5,464.8975,663.5,464.8975,651.5,452.8975,663.5,440.8975" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="760" y="475.5322">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="185" x="663.5" y="457.0547">active and owned by another client</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="860.5" y="450.5771">no</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="681.5,392.4199,830.5,392.4199,842.5,404.4199,830.5,416.4199,681.5,416.4199,669.5,404.4199,681.5,392.4199" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="760" y="427.0547">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="149" x="681.5" y="408.5771">lease for requested address</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="842.5" y="402.0996">no</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="756,635.4629,768,647.4629,756,659.4629,744,647.4629,756,635.4629" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="107" x="702.5" y="742.9404"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="87" x="712.5" y="764.542">return no lease</text><ellipse cx="756" cy="823.0732" fill="#FFFFFF" filter="url(#f1aicqcofdeklm)" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="756" cy="823.0732" fill="#000000" rx="6" ry="6" style="stroke: #7F7F7F; stroke-width: 1.0;"/><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="664.5,694.4629,847.5,694.4629,859.5,706.4629,847.5,718.4629,664.5,718.4629,652.5,706.4629,664.5,694.4629" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="760" y="729.0977">no</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="183" x="664.5" y="710.6201">requested address in allowed pool</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="859.5" y="704.1426">yes</text><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="156" x="1133.25" y="289.8096"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="136" x="1143.25" y="311.4111">pick candidate address</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="1160.75,449.8975,1261.75,449.8975,1273.75,461.8975,1261.75,473.8975,1160.75,473.8975,1148.75,461.8975,1160.75,449.8975" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="101" x="1160.75" y="466.0547">lease for candidate</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="1134.75" y="459.5771">no</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="1273.75" y="459.5771">yes</text><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="182" x="993" y="483.8975"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="162" x="1003" y="505.499">create and return new lease</text><ellipse cx="1084" cy="564.0303" fill="#FFFFFF" filter="url(#f1aicqcofdeklm)" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="1084" cy="564.0303" fill="#000000" rx="6" ry="6" style="stroke: #7F7F7F; stroke-width: 1.0;"/><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="145" x="1266" y="532.375"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="125" x="1276" y="553.9766">reclaim expired lease</text><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="164" x="1256.5" y="601.5078"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="144" x="1266.5" y="623.1094">update lease information</text><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="138" x="1269.5" y="670.6406"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="1279.5" y="692.2422">callout lease4_select</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="1302,739.7734,1375,739.7734,1387,751.7734,1375,763.7734,1302,763.7734,1290,751.7734,1302,739.7734" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="73" x="1302" y="755.9307">callout return</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="22" x="1268" y="749.4531">SKIP</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="57" x="1387" y="749.4531">CONTINUE</text><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="107" x="1215" y="773.7734"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="87" x="1225" y="795.375">return no lease</text><ellipse cx="1268.5" cy="853.9063" fill="#FFFFFF" filter="url(#f1aicqcofdeklm)" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="1268.5" cy="853.9063" fill="#000000" rx="6" ry="6" style="stroke: #7F7F7F; stroke-width: 1.0;"/><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="95" x="1361" y="773.7734"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="75" x="1371" y="795.375">update lease</text><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="133" x="1342" y="842.9063"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="113" x="1352" y="864.5078">return reused lease</text><ellipse cx="1408.5" cy="923.0391" fill="#FFFFFF" filter="url(#f1aicqcofdeklm)" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="1408.5" cy="923.0391" fill="#000000" rx="6" ry="6" style="stroke: #7F7F7F; stroke-width: 1.0;"/><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="1318,483.8975,1359,483.8975,1371,495.8975,1359,507.8975,1318,507.8975,1306,495.8975,1318,483.8975" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="1342.5" y="518.5322">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="41" x="1318" y="500.0547">expired</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="1371" y="493.5771">no</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="1115.25,401.4199,1307.25,401.4199,1319.25,413.4199,1307.25,425.4199,1115.25,425.4199,1103.25,413.4199,1115.25,401.4199" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="1215.25" y="436.0547">no</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="192" x="1115.25" y="417.5771">candidate is used by another thread</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="1319.25" y="411.0996">yes</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="1211.25,1000.9941,1223.25,1012.9941,1211.25,1024.9941,1199.25,1012.9941,1211.25,1000.9941" style="stroke: #A80036; stroke-width: 1.5;"/><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="1106.25,352.9424,1316.25,352.9424,1328.25,364.9424,1316.25,376.9424,1106.25,376.9424,1094.25,364.9424,1106.25,352.9424" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="1215.25" y="387.5771">no</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="210" x="1106.25" y="369.0996">candidate is reserved for another client</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="1328.25" y="362.6221">yes</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="1211.25,1049.4717,1223.25,1061.4717,1211.25,1073.4717,1199.25,1061.4717,1211.25,1049.4717" style="stroke: #A80036; stroke-width: 1.5;"/><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="1129.75,241.8096,1292.75,241.8096,1304.75,253.8096,1292.75,265.8096,1129.75,265.8096,1117.75,253.8096,1129.75,241.8096" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="163" x="1129.75" y="257.9668">iterate over pools and subnets</text><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="132" x="1145.25" y="1132.4717"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="112" x="1155.25" y="1154.0732">maximum attempts</text><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="107" x="1157.75" y="1195.6152"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="87" x="1167.75" y="1217.2168">return no lease</text><ellipse cx="1211.25" cy="1271.2705" fill="#FFFFFF" filter="url(#f1aicqcofdeklm)" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="1211.25" cy="1271.2705" fill="#000000" rx="6" ry="6" style="stroke: #7F7F7F; stroke-width: 1.0;"/><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="1090.75,193.332,1331.75,193.332,1343.75,205.332,1331.75,217.332,1090.75,217.332,1078.75,205.332,1090.75,193.332" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="1215.25" y="227.9668">no</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="241" x="1090.75" y="209.4893">client lease and lease address in allowed pool</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="1343.75" y="203.0117">yes</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="983.625,1311.082,995.625,1323.082,983.625,1335.082,971.625,1323.082,983.625,1311.082" style="stroke: #A80036; stroke-width: 1.5;"/><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="631.3125,1341.082,643.3125,1353.082,631.3125,1365.082,619.3125,1353.082,631.3125,1341.082" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="164" x="549.3125" y="1530.5146"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="144" x="559.3125" y="1552.1162">update lease information</text><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="145" x="558.8125" y="1633.125"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="125" x="568.8125" y="1654.7266">reclaim expired lease</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="585.8125,1584.6475,676.8125,1584.6475,688.8125,1596.6475,676.8125,1608.6475,585.8125,1608.6475,573.8125,1596.6475,585.8125,1584.6475" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="635.3125" y="1619.2822">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="91" x="585.8125" y="1600.8047">old lease expired</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="688.8125" y="1594.3271">no</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="631.3125,1687.2578,643.3125,1699.2578,631.3125,1711.2578,619.3125,1699.2578,631.3125,1687.2578" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="140" x="561.3125" y="1731.2578"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="120" x="571.3125" y="1752.8594">callout lease4_renew</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="594.8125,1785.3906,667.8125,1785.3906,679.8125,1797.3906,667.8125,1809.3906,594.8125,1809.3906,582.8125,1797.3906,594.8125,1785.3906" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="73" x="594.8125" y="1801.5479">callout return</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="22" x="560.8125" y="1795.0703">SKIP</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="57" x="679.8125" y="1795.0703">CONTINUE</text><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="145" x="468.3125" y="1819.3906"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="125" x="478.3125" y="1840.9922">return old client lease</text><ellipse cx="540.8125" cy="1884.5234" fill="#FFFFFF" filter="url(#f1aicqcofdeklm)" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="540.8125" cy="1884.5234" fill="#000000" rx="6" ry="6" style="stroke: #7F7F7F; stroke-width: 1.0;"/><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="95" x="674.3125" y="1819.3906"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="75" x="684.3125" y="1840.9922">update lease</text><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="177" x="633.3125" y="1873.5234"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="157" x="643.3125" y="1895.125">return renewed client lease</text><ellipse cx="721.8125" cy="1938.6563" fill="#FFFFFF" filter="url(#f1aicqcofdeklm)" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="721.8125" cy="1938.6563" fill="#000000" rx="6" ry="6" style="stroke: #7F7F7F; stroke-width: 1.0;"/><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="470.8125,1482.0371,791.8125,1482.0371,803.8125,1494.0371,791.8125,1506.0371,470.8125,1506.0371,458.8125,1494.0371,470.8125,1482.0371" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="635.3125" y="1516.6719">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="321" x="470.8125" y="1498.1943">has reserved address or client lease address in allowed pool</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="803.8125" y="1491.7168">no</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="449.3125,1433.5596,813.3125,1433.5596,825.3125,1445.5596,813.3125,1457.5596,449.3125,1457.5596,437.3125,1445.5596,449.3125,1433.5596" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="635.3125" y="1468.1943">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="364" x="449.3125" y="1449.7168">no requested address or requested address == client lease address</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="825.3125" y="1443.2393">no</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="631.3125,1991.6563,643.3125,2003.6563,631.3125,2015.6563,619.3125,2003.6563,631.3125,1991.6563" style="stroke: #A80036; stroke-width: 1.5;"/><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="601.8125,1385.082,660.8125,1385.082,672.8125,1397.082,660.8125,1409.082,601.8125,1409.082,589.8125,1397.082,601.8125,1385.082" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="635.3125" y="1419.7168">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="59" x="601.8125" y="1401.2393">client lease</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="672.8125" y="1394.7617">no</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="631.3125,2035.6563,643.3125,2047.6563,631.3125,2059.6563,619.3125,2047.6563,631.3125,2035.6563" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="206" x="528.3125" y="2079.6563"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="186" x="538.3125" y="2101.2578">get lease for requested address</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="589.3125,2133.7891,673.3125,2133.7891,685.3125,2145.7891,673.3125,2157.7891,589.3125,2157.7891,577.3125,2145.7891,589.3125,2133.7891" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="84" x="589.3125" y="2149.9463">requested lease</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="559.3125" y="2143.4688">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="685.3125" y="2143.4688">no</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="425.3125,2167.7891,466.3125,2167.7891,478.3125,2179.7891,466.3125,2191.7891,425.3125,2191.7891,413.3125,2179.7891,425.3125,2167.7891" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="41" x="425.3125" y="2183.9463">expired</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="399.3125" y="2177.4688">no</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="18" x="478.3125" y="2177.4688">yes</text><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="107" x="288.8125" y="2201.7891"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="87" x="298.8125" y="2223.3906">return no lease</text><ellipse cx="342.3125" cy="2281.9219" fill="#FFFFFF" filter="url(#f1aicqcofdeklm)" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="342.3125" cy="2281.9219" fill="#000000" rx="6" ry="6" style="stroke: #7F7F7F; stroke-width: 1.0;"/><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="145" x="476.8125" y="2201.7891"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="125" x="486.8125" y="2223.3906">reclaim expired lease</text><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="164" x="467.3125" y="2270.9219"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="144" x="477.3125" y="2292.5234">update lease information</text><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="138" x="480.3125" y="2325.0547"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="490.3125" y="2346.6563">callout lease4_select</text><polygon fill="#FEFECE" filter="url(#f1aicqcofdeklm)" points="512.8125,2379.1875,585.8125,2379.1875,597.8125,2391.1875,585.8125,2403.1875,512.8125,2403.1875,500.8125,2391.1875,512.8125,2379.1875" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="73" x="512.8125" y="2395.3447">callout return</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="22" x="478.8125" y="2388.8672">SKIP</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="57" x="597.8125" y="2388.8672">CONTINUE</text><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="107" x="425.8125" y="2413.1875"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="87" x="435.8125" y="2434.7891">return no lease</text><ellipse cx="479.3125" cy="2478.3203" fill="#FFFFFF" filter="url(#f1aicqcofdeklm)" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="479.3125" cy="2478.3203" fill="#000000" rx="6" ry="6" style="stroke: #7F7F7F; stroke-width: 1.0;"/><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="95" x="571.8125" y="2413.1875"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="75" x="581.8125" y="2434.7891">update lease</text><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="133" x="552.8125" y="2467.3203"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="113" x="562.8125" y="2488.9219">return reused lease</text><ellipse cx="619.3125" cy="2532.4531" fill="#FFFFFF" filter="url(#f1aicqcofdeklm)" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="619.3125" cy="2532.4531" fill="#000000" rx="6" ry="6" style="stroke: #7F7F7F; stroke-width: 1.0;"/><rect fill="#FEFECE" filter="url(#f1aicqcofdeklm)" height="34.1328" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="182" x="725.8125" y="2167.7891"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="162" x="735.8125" y="2189.3906">create and return new lease</text><ellipse cx="816.8125" cy="2247.9219" fill="#FFFFFF" filter="url(#f1aicqcofdeklm)" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="816.8125" cy="2247.9219" fill="#000000" rx="6" ry="6" style="stroke: #7F7F7F; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="631.3125" x2="631.3125" y1="51.1992" y2="71.1992"/><polygon fill="#A80036" points="627.3125,61.1992,631.3125,71.1992,635.3125,61.1992,631.3125,65.1992" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="422" x2="422" y1="275.9424" y2="310.9424"/><polygon fill="#A80036" points="418,300.9424,422,310.9424,426,300.9424,422,304.9424" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="422" x2="422" y1="217.332" y2="241.8096"/><polygon fill="#A80036" points="418,231.8096,422,241.8096,426,231.8096,422,235.8096" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="563" x2="575" y1="205.332" y2="205.332"/><polygon fill="#A80036" points="571,283.376,575,293.376,579,283.376,575,287.376" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="575" x2="575" y1="205.332" y2="375.4199"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="575" x2="291" y1="375.4199" y2="375.4199"/><polygon fill="#A80036" points="301,371.4199,291,375.4199,301,379.4199,297,375.4199" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="217" x2="136" y1="171.332" y2="171.332"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="136" x2="136" y1="171.332" y2="193.332"/><polygon fill="#A80036" points="132,183.332,136,193.332,140,183.332,136,187.332" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="341" x2="422" y1="171.332" y2="171.332"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="422" x2="422" y1="171.332" y2="193.332"/><polygon fill="#A80036" points="418,183.332,422,193.332,426,183.332,422,187.332" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="136" x2="136" y1="227.4648" y2="375.4199"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="136" x2="267" y1="375.4199" y2="375.4199"/><polygon fill="#A80036" points="257,371.4199,267,375.4199,257,379.4199,261,375.4199" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="279" x2="279" y1="553.5078" y2="588.5078"/><polygon fill="#A80036" points="275,578.5078,279,588.5078,283,578.5078,279,582.5078" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="279" x2="279" y1="494.8975" y2="519.375"/><polygon fill="#A80036" points="275,509.375,279,519.375,283,509.375,279,513.375" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="383.5" x2="395.5" y1="482.8975" y2="482.8975"/><polygon fill="#A80036" points="391.5,551.9414,395.5,561.9414,399.5,551.9414,395.5,555.9414" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="395.5" x2="395.5" y1="482.8975" y2="640.9854"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="395.5" x2="279" y1="640.9854" y2="640.9854"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="279" x2="279" y1="640.9854" y2="665.4629"/><polygon fill="#A80036" points="275,655.4629,279,665.4629,283,655.4629,279,659.4629" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="279" x2="279" y1="446.4199" y2="470.8975"/><polygon fill="#A80036" points="275,460.8975,279,470.8975,283,460.8975,279,464.8975" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="365.5" x2="405.5" y1="434.4199" y2="434.4199"/><polygon fill="#A80036" points="401.5,545.9414,405.5,555.9414,409.5,545.9414,405.5,549.9414" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="405.5" x2="405.5" y1="434.4199" y2="677.4629"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="405.5" x2="291" y1="677.4629" y2="677.4629"/><polygon fill="#A80036" points="301,673.4629,291,677.4629,301,681.4629,297,677.4629" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="279" x2="279" y1="387.4199" y2="422.4199"/><polygon fill="#A80036" points="275,412.4199,279,422.4199,283,412.4199,279,416.4199" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="279" x2="279" y1="904.0283" y2="939.0283"/><polygon fill="#A80036" points="275,929.0283,279,939.0283,283,929.0283,279,933.0283" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="279" x2="279" y1="845.418" y2="869.8955"/><polygon fill="#A80036" points="275,859.8955,279,869.8955,283,859.8955,279,863.8955" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="306.5" x2="342.5" y1="833.418" y2="833.418"/><polygon fill="#A80036" points="338.5,902.4619,342.5,912.4619,346.5,902.4619,342.5,906.4619" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="342.5" x2="342.5" y1="833.418" y2="991.5059"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="342.5" x2="279" y1="991.5059" y2="991.5059"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="279" x2="279" y1="991.5059" y2="1015.9834"/><polygon fill="#A80036" points="275,1005.9834,279,1015.9834,283,1005.9834,279,1009.9834" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="279" x2="279" y1="796.9404" y2="821.418"/><polygon fill="#A80036" points="275,811.418,279,821.418,283,811.418,279,815.418" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="365.5" x2="377.5" y1="784.9404" y2="784.9404"/><polygon fill="#A80036" points="373.5,896.4619,377.5,906.4619,381.5,896.4619,377.5,900.4619" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="377.5" x2="377.5" y1="784.9404" y2="1027.9834"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="377.5" x2="291" y1="1027.9834" y2="1027.9834"/><polygon fill="#A80036" points="301,1023.9834,291,1027.9834,301,1031.9834,297,1027.9834" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="279" x2="279" y1="1157.5938" y2="1186.6045"/><polygon fill="#A80036" points="275,1176.6045,279,1186.6045,283,1176.6045,279,1180.6045" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="279" x2="279" y1="1098.9834" y2="1123.4609"/><polygon fill="#A80036" points="275,1113.4609,279,1123.4609,283,1113.4609,279,1117.4609" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="382.5" x2="394.5" y1="1086.9834" y2="1086.9834"/><polygon fill="#A80036" points="390.5,1156.0273,394.5,1166.0273,398.5,1156.0273,394.5,1160.0273" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="394.5" x2="394.5" y1="1086.9834" y2="1239.082"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="394.5" x2="279" y1="1239.082" y2="1239.082"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="279" x2="279" y1="1239.082" y2="1259.082"/><polygon fill="#A80036" points="275,1249.082,279,1259.082,283,1249.082,279,1253.082" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="279" x2="279" y1="1039.9834" y2="1074.9834"/><polygon fill="#A80036" points="275,1064.9834,279,1074.9834,283,1064.9834,279,1068.9834" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="279" x2="279" y1="748.4629" y2="772.9404"/><polygon fill="#A80036" points="275,762.9404,279,772.9404,283,762.9404,279,766.9404" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="399.5" x2="411.5" y1="736.4629" y2="736.4629"/><polygon fill="#A80036" points="407.5,999.0059,411.5,1009.0059,415.5,999.0059,411.5,1003.0059" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="411.5" x2="411.5" y1="736.4629" y2="1271.082"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="411.5" x2="291" y1="1271.082" y2="1271.082"/><polygon fill="#A80036" points="301,1267.082,291,1271.082,301,1275.082,297,1271.082" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="279" x2="279" y1="689.4629" y2="724.4629"/><polygon fill="#A80036" points="275,714.4629,279,724.4629,283,714.4629,279,718.4629" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="756" x2="756" y1="275.9424" y2="310.9424"/><polygon fill="#A80036" points="752,300.9424,756,310.9424,760,300.9424,756,304.9424" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="756" x2="756" y1="217.332" y2="241.8096"/><polygon fill="#A80036" points="752,231.8096,756,241.8096,760,231.8096,756,235.8096" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="897" x2="909" y1="205.332" y2="205.332"/><polygon fill="#A80036" points="905,274.376,909,284.376,913,274.376,909,278.376" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="909" x2="909" y1="205.332" y2="357.4199"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="909" x2="756" y1="357.4199" y2="357.4199"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="756" x2="756" y1="357.4199" y2="392.4199"/><polygon fill="#A80036" points="752,382.4199,756,392.4199,760,382.4199,756,386.4199" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="756" x2="756" y1="523.5078" y2="558.5078"/><polygon fill="#A80036" points="752,548.5078,756,558.5078,760,548.5078,756,552.5078" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="756" x2="756" y1="464.8975" y2="489.375"/><polygon fill="#A80036" points="752,479.375,756,489.375,760,479.375,756,483.375" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="860.5" x2="872.5" y1="452.8975" y2="452.8975"/><polygon fill="#A80036" points="868.5,521.9414,872.5,531.9414,876.5,521.9414,872.5,525.9414" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="872.5" x2="872.5" y1="452.8975" y2="610.9854"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="872.5" x2="756" y1="610.9854" y2="610.9854"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="756" x2="756" y1="610.9854" y2="635.4629"/><polygon fill="#A80036" points="752,625.4629,756,635.4629,760,625.4629,756,629.4629" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="756" x2="756" y1="416.4199" y2="440.8975"/><polygon fill="#A80036" points="752,430.8975,756,440.8975,760,430.8975,756,434.8975" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="842.5" x2="882.5" y1="404.4199" y2="404.4199"/><polygon fill="#A80036" points="878.5,515.9414,882.5,525.9414,886.5,515.9414,882.5,519.9414" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="882.5" x2="882.5" y1="404.4199" y2="647.4629"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="882.5" x2="768" y1="647.4629" y2="647.4629"/><polygon fill="#A80036" points="778,643.4629,768,647.4629,778,651.4629,774,647.4629" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="756" x2="756" y1="777.0732" y2="812.0732"/><polygon fill="#A80036" points="752,802.0732,756,812.0732,760,802.0732,756,806.0732" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="756" x2="756" y1="718.4629" y2="742.9404"/><polygon fill="#A80036" points="752,732.9404,756,742.9404,760,732.9404,756,736.9404" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="859.5" x2="871.5" y1="706.4629" y2="706.4629"/><polygon fill="#A80036" points="867.5,1013.8389,871.5,1023.8389,875.5,1013.8389,871.5,1017.8389" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="871.5" x2="871.5" y1="706.4629" y2="1323.082"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="871.5" x2="971.625" y1="1323.082" y2="1323.082"/><polygon fill="#A80036" points="961.625,1319.082,971.625,1323.082,961.625,1327.082,965.625,1323.082" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="756" x2="756" y1="659.4629" y2="694.4629"/><polygon fill="#A80036" points="752,684.4629,756,694.4629,760,684.4629,756,688.4629" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1084" x2="1084" y1="518.0303" y2="553.0303"/><polygon fill="#A80036" points="1080,543.0303,1084,553.0303,1088,543.0303,1084,547.0303" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1338.5" x2="1338.5" y1="566.5078" y2="601.5078"/><polygon fill="#A80036" points="1334.5,591.5078,1338.5,601.5078,1342.5,591.5078,1338.5,595.5078" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1338.5" x2="1338.5" y1="635.6406" y2="670.6406"/><polygon fill="#A80036" points="1334.5,660.6406,1338.5,670.6406,1342.5,660.6406,1338.5,664.6406" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1268.5" x2="1268.5" y1="807.9063" y2="842.9063"/><polygon fill="#A80036" points="1264.5,832.9063,1268.5,842.9063,1272.5,832.9063,1268.5,836.9063" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1408.5" x2="1408.5" y1="807.9063" y2="842.9063"/><polygon fill="#A80036" points="1404.5,832.9063,1408.5,842.9063,1412.5,832.9063,1408.5,836.9063" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1408.5" x2="1408.5" y1="877.0391" y2="912.0391"/><polygon fill="#A80036" points="1404.5,902.0391,1408.5,912.0391,1412.5,902.0391,1408.5,906.0391" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1290" x2="1268.5" y1="751.7734" y2="751.7734"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1268.5" x2="1268.5" y1="751.7734" y2="773.7734"/><polygon fill="#A80036" points="1264.5,763.7734,1268.5,773.7734,1272.5,763.7734,1268.5,767.7734" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1387" x2="1408.5" y1="751.7734" y2="751.7734"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1408.5" x2="1408.5" y1="751.7734" y2="773.7734"/><polygon fill="#A80036" points="1404.5,763.7734,1408.5,773.7734,1412.5,763.7734,1408.5,767.7734" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1338.5" x2="1338.5" y1="704.7734" y2="739.7734"/><polygon fill="#A80036" points="1334.5,729.7734,1338.5,739.7734,1342.5,729.7734,1338.5,733.7734" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1338.5" x2="1338.5" y1="507.8975" y2="532.375"/><polygon fill="#A80036" points="1334.5,522.375,1338.5,532.375,1342.5,522.375,1338.5,526.375" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1371" x2="1489" y1="495.8975" y2="495.8975"/><polygon fill="#A80036" points="1485,726.207,1489,736.207,1493,726.207,1489,730.207" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1489" x2="1489" y1="495.8975" y2="976.5166"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1489" x2="1211.25" y1="976.5166" y2="976.5166"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1211.25" x2="1211.25" y1="976.5166" y2="1000.9941"/><polygon fill="#A80036" points="1207.25,990.9941,1211.25,1000.9941,1215.25,990.9941,1211.25,994.9941" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1148.75" x2="1084" y1="461.8975" y2="461.8975"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1084" x2="1084" y1="461.8975" y2="483.8975"/><polygon fill="#A80036" points="1080,473.8975,1084,483.8975,1088,473.8975,1084,477.8975" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1273.75" x2="1338.5" y1="461.8975" y2="461.8975"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1338.5" x2="1338.5" y1="461.8975" y2="483.8975"/><polygon fill="#A80036" points="1334.5,473.8975,1338.5,483.8975,1342.5,473.8975,1338.5,477.8975" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1211.25" x2="1211.25" y1="425.4199" y2="449.8975"/><polygon fill="#A80036" points="1207.25,439.8975,1211.25,449.8975,1215.25,439.8975,1211.25,443.8975" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1319.25" x2="1507" y1="413.4199" y2="413.4199"/><polygon fill="#A80036" points="1503,703.207,1507,713.207,1511,703.207,1507,707.207" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1507" x2="1507" y1="413.4199" y2="1012.9941"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1507" x2="1223.25" y1="1012.9941" y2="1012.9941"/><polygon fill="#A80036" points="1233.25,1008.9941,1223.25,1012.9941,1233.25,1016.9941,1229.25,1012.9941" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1211.25" x2="1211.25" y1="376.9424" y2="401.4199"/><polygon fill="#A80036" points="1207.25,391.4199,1211.25,401.4199,1215.25,391.4199,1211.25,395.4199" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1328.25" x2="1525" y1="364.9424" y2="364.9424"/><polygon fill="#A80036" points="1521,703.207,1525,713.207,1529,703.207,1525,707.207" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1525" x2="1525" y1="364.9424" y2="1061.4717"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1525" x2="1223.25" y1="1061.4717" y2="1061.4717"/><polygon fill="#A80036" points="1233.25,1057.4717,1223.25,1061.4717,1233.25,1065.4717,1229.25,1061.4717" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1211.25" x2="1211.25" y1="1024.9941" y2="1049.4717"/><polygon fill="#A80036" points="1207.25,1039.4717,1211.25,1049.4717,1215.25,1039.4717,1211.25,1043.4717" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1211.25" x2="1211.25" y1="323.9424" y2="352.9424"/><polygon fill="#A80036" points="1207.25,342.9424,1211.25,352.9424,1215.25,342.9424,1211.25,346.9424" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1211.25" x2="1211.25" y1="265.8096" y2="289.8096"/><polygon fill="#A80036" points="1207.25,279.8096,1211.25,289.8096,1215.25,279.8096,1211.25,283.8096" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1211.25" x2="1211.25" y1="1073.4717" y2="1085.4717"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1211.25" x2="1543" y1="1085.4717" y2="1085.4717"/><polygon fill="#A80036" points="1539,676.6406,1543,666.6406,1547,676.6406,1543,672.6406" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1543" x2="1543" y1="253.8096" y2="1085.4717"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1543" x2="1304.75" y1="253.8096" y2="253.8096"/><polygon fill="#A80036" points="1314.75,249.8096,1304.75,253.8096,1314.75,257.8096,1310.75,253.8096" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1117.75" x2="951" y1="253.8096" y2="253.8096"/><polygon fill="#A80036" points="947,662.6406,951,672.6406,955,662.6406,951,666.6406" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="951" x2="951" y1="253.8096" y2="1097.4717"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="951" x2="1211.25" y1="1097.4717" y2="1097.4717"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1211.25" x2="1211.25" y1="1097.4717" y2="1132.4717"/><polygon fill="#A80036" points="1207.25,1122.4717,1211.25,1132.4717,1215.25,1122.4717,1211.25,1126.4717" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1211.25" x2="1211.25" y1="1166.6045" y2="1195.6152"/><polygon fill="#A80036" points="1207.25,1185.6152,1211.25,1195.6152,1215.25,1185.6152,1211.25,1189.6152" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1211.25" x2="1211.25" y1="1229.748" y2="1260.2705"/><polygon fill="#A80036" points="1207.25,1250.2705,1211.25,1260.2705,1215.25,1250.2705,1211.25,1254.2705" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1211.25" x2="1211.25" y1="217.332" y2="241.8096"/><polygon fill="#A80036" points="1207.25,231.8096,1211.25,241.8096,1215.25,231.8096,1211.25,235.8096" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1343.75" x2="1553" y1="205.332" y2="205.332"/><polygon fill="#A80036" points="1549,760.2734,1553,770.2734,1557,760.2734,1553,764.2734" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1553" x2="1553" y1="205.332" y2="1323.082"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1553" x2="995.625" y1="1323.082" y2="1323.082"/><polygon fill="#A80036" points="1005.625,1319.082,995.625,1323.082,1005.625,1327.082,1001.625,1323.082" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="921.625" x2="756" y1="171.332" y2="171.332"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="756" x2="756" y1="171.332" y2="193.332"/><polygon fill="#A80036" points="752,183.332,756,193.332,760,183.332,756,187.332" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1045.625" x2="1211.25" y1="171.332" y2="171.332"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1211.25" x2="1211.25" y1="171.332" y2="193.332"/><polygon fill="#A80036" points="1207.25,183.332,1211.25,193.332,1215.25,183.332,1211.25,187.332" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="572.8125" x2="279" y1="137.332" y2="137.332"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="279" x2="279" y1="137.332" y2="159.332"/><polygon fill="#A80036" points="275,149.332,279,159.332,283,149.332,279,153.332" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="689.8125" x2="983.625" y1="137.332" y2="137.332"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="983.625" x2="983.625" y1="137.332" y2="159.332"/><polygon fill="#A80036" points="979.625,149.332,983.625,159.332,987.625,149.332,983.625,153.332" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="279" x2="279" y1="1283.082" y2="1353.082"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="279" x2="619.3125" y1="1353.082" y2="1353.082"/><polygon fill="#A80036" points="609.3125,1349.082,619.3125,1353.082,609.3125,1357.082,613.3125,1353.082" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="983.625" x2="983.625" y1="1335.082" y2="1353.082"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="983.625" x2="643.3125" y1="1353.082" y2="1353.082"/><polygon fill="#A80036" points="653.3125,1349.082,643.3125,1353.082,653.3125,1357.082,649.3125,1353.082" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="631.3125" x2="631.3125" y1="105.332" y2="125.332"/><polygon fill="#A80036" points="627.3125,115.332,631.3125,125.332,635.3125,115.332,631.3125,119.332" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="631.3125" x2="631.3125" y1="1608.6475" y2="1633.125"/><polygon fill="#A80036" points="627.3125,1623.125,631.3125,1633.125,635.3125,1623.125,631.3125,1627.125" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="688.8125" x2="713.8125" y1="1596.6475" y2="1596.6475"/><polygon fill="#A80036" points="709.8125,1640.1914,713.8125,1650.1914,717.8125,1640.1914,713.8125,1644.1914" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="713.8125" x2="713.8125" y1="1596.6475" y2="1699.2578"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="713.8125" x2="643.3125" y1="1699.2578" y2="1699.2578"/><polygon fill="#A80036" points="653.3125,1695.2578,643.3125,1699.2578,653.3125,1703.2578,649.3125,1699.2578" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="631.3125" x2="631.3125" y1="1667.2578" y2="1687.2578"/><polygon fill="#A80036" points="627.3125,1677.2578,631.3125,1687.2578,635.3125,1677.2578,631.3125,1681.2578" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="631.3125" x2="631.3125" y1="1564.6475" y2="1584.6475"/><polygon fill="#A80036" points="627.3125,1574.6475,631.3125,1584.6475,635.3125,1574.6475,631.3125,1578.6475" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="631.3125" x2="631.3125" y1="1711.2578" y2="1731.2578"/><polygon fill="#A80036" points="627.3125,1721.2578,631.3125,1731.2578,635.3125,1721.2578,631.3125,1725.2578" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="540.8125" x2="540.8125" y1="1853.5234" y2="1873.5234"/><polygon fill="#A80036" points="536.8125,1863.5234,540.8125,1873.5234,544.8125,1863.5234,540.8125,1867.5234" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="721.8125" x2="721.8125" y1="1853.5234" y2="1873.5234"/><polygon fill="#A80036" points="717.8125,1863.5234,721.8125,1873.5234,725.8125,1863.5234,721.8125,1867.5234" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="721.8125" x2="721.8125" y1="1907.6563" y2="1927.6563"/><polygon fill="#A80036" points="717.8125,1917.6563,721.8125,1927.6563,725.8125,1917.6563,721.8125,1921.6563" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="582.8125" x2="540.8125" y1="1797.3906" y2="1797.3906"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="540.8125" x2="540.8125" y1="1797.3906" y2="1819.3906"/><polygon fill="#A80036" points="536.8125,1809.3906,540.8125,1819.3906,544.8125,1809.3906,540.8125,1813.3906" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="679.8125" x2="721.8125" y1="1797.3906" y2="1797.3906"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="721.8125" x2="721.8125" y1="1797.3906" y2="1819.3906"/><polygon fill="#A80036" points="717.8125,1809.3906,721.8125,1819.3906,725.8125,1809.3906,721.8125,1813.3906" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="631.3125" x2="631.3125" y1="1765.3906" y2="1785.3906"/><polygon fill="#A80036" points="627.3125,1775.3906,631.3125,1785.3906,635.3125,1775.3906,631.3125,1779.3906" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="631.3125" x2="631.3125" y1="1506.0371" y2="1530.5146"/><polygon fill="#A80036" points="627.3125,1520.5146,631.3125,1530.5146,635.3125,1520.5146,631.3125,1524.5146" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="803.8125" x2="830.3125" y1="1494.0371" y2="1494.0371"/><polygon fill="#A80036" points="826.3125,1735.3467,830.3125,1745.3467,834.3125,1735.3467,830.3125,1739.3467" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="830.3125" x2="830.3125" y1="1494.0371" y2="1971.6563"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="830.3125" x2="631.3125" y1="1971.6563" y2="1971.6563"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="631.3125" x2="631.3125" y1="1971.6563" y2="1991.6563"/><polygon fill="#A80036" points="627.3125,1981.6563,631.3125,1991.6563,635.3125,1981.6563,631.3125,1985.6563" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="631.3125" x2="631.3125" y1="1457.5596" y2="1482.0371"/><polygon fill="#A80036" points="627.3125,1472.0371,631.3125,1482.0371,635.3125,1472.0371,631.3125,1476.0371" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="825.3125" x2="852.3125" y1="1445.5596" y2="1445.5596"/><polygon fill="#A80036" points="848.3125,1729.3467,852.3125,1739.3467,856.3125,1729.3467,852.3125,1733.3467" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="852.3125" x2="852.3125" y1="1445.5596" y2="2003.6563"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="852.3125" x2="643.3125" y1="2003.6563" y2="2003.6563"/><polygon fill="#A80036" points="653.3125,1999.6563,643.3125,2003.6563,653.3125,2007.6563,649.3125,2003.6563" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="631.3125" x2="631.3125" y1="1409.082" y2="1433.5596"/><polygon fill="#A80036" points="627.3125,1423.5596,631.3125,1433.5596,635.3125,1423.5596,631.3125,1427.5596" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="672.8125" x2="874.3125" y1="1397.082" y2="1397.082"/><polygon fill="#A80036" points="870.3125,1729.3467,874.3125,1739.3467,878.3125,1729.3467,874.3125,1733.3467" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="874.3125" x2="874.3125" y1="1397.082" y2="2047.6563"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="874.3125" x2="643.3125" y1="2047.6563" y2="2047.6563"/><polygon fill="#A80036" points="653.3125,2043.6563,643.3125,2047.6563,653.3125,2051.6563,649.3125,2047.6563" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="631.3125" x2="631.3125" y1="2015.6563" y2="2035.6563"/><polygon fill="#A80036" points="627.3125,2025.6563,631.3125,2035.6563,635.3125,2025.6563,631.3125,2029.6563" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="631.3125" x2="631.3125" y1="1365.082" y2="1385.082"/><polygon fill="#A80036" points="627.3125,1375.082,631.3125,1385.082,635.3125,1375.082,631.3125,1379.082" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="631.3125" x2="631.3125" y1="2059.6563" y2="2079.6563"/><polygon fill="#A80036" points="627.3125,2069.6563,631.3125,2079.6563,635.3125,2069.6563,631.3125,2073.6563" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="342.3125" x2="342.3125" y1="2235.9219" y2="2270.9219"/><polygon fill="#A80036" points="338.3125,2260.9219,342.3125,2270.9219,346.3125,2260.9219,342.3125,2264.9219" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="549.3125" x2="549.3125" y1="2235.9219" y2="2270.9219"/><polygon fill="#A80036" points="545.3125,2260.9219,549.3125,2270.9219,553.3125,2260.9219,549.3125,2264.9219" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="549.3125" x2="549.3125" y1="2305.0547" y2="2325.0547"/><polygon fill="#A80036" points="545.3125,2315.0547,549.3125,2325.0547,553.3125,2315.0547,549.3125,2319.0547" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="479.3125" x2="479.3125" y1="2447.3203" y2="2467.3203"/><polygon fill="#A80036" points="475.3125,2457.3203,479.3125,2467.3203,483.3125,2457.3203,479.3125,2461.3203" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="619.3125" x2="619.3125" y1="2447.3203" y2="2467.3203"/><polygon fill="#A80036" points="615.3125,2457.3203,619.3125,2467.3203,623.3125,2457.3203,619.3125,2461.3203" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="619.3125" x2="619.3125" y1="2501.4531" y2="2521.4531"/><polygon fill="#A80036" points="615.3125,2511.4531,619.3125,2521.4531,623.3125,2511.4531,619.3125,2515.4531" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="500.8125" x2="479.3125" y1="2391.1875" y2="2391.1875"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="479.3125" x2="479.3125" y1="2391.1875" y2="2413.1875"/><polygon fill="#A80036" points="475.3125,2403.1875,479.3125,2413.1875,483.3125,2403.1875,479.3125,2407.1875" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="597.8125" x2="619.3125" y1="2391.1875" y2="2391.1875"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="619.3125" x2="619.3125" y1="2391.1875" y2="2413.1875"/><polygon fill="#A80036" points="615.3125,2403.1875,619.3125,2413.1875,623.3125,2403.1875,619.3125,2407.1875" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="549.3125" x2="549.3125" y1="2359.1875" y2="2379.1875"/><polygon fill="#A80036" points="545.3125,2369.1875,549.3125,2379.1875,553.3125,2369.1875,549.3125,2373.1875" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="413.3125" x2="342.3125" y1="2179.7891" y2="2179.7891"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="342.3125" x2="342.3125" y1="2179.7891" y2="2201.7891"/><polygon fill="#A80036" points="338.3125,2191.7891,342.3125,2201.7891,346.3125,2191.7891,342.3125,2195.7891" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="478.3125" x2="549.3125" y1="2179.7891" y2="2179.7891"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="549.3125" x2="549.3125" y1="2179.7891" y2="2201.7891"/><polygon fill="#A80036" points="545.3125,2191.7891,549.3125,2201.7891,553.3125,2191.7891,549.3125,2195.7891" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="816.8125" x2="816.8125" y1="2201.9219" y2="2236.9219"/><polygon fill="#A80036" points="812.8125,2226.9219,816.8125,2236.9219,820.8125,2226.9219,816.8125,2230.9219" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="577.3125" x2="445.8125" y1="2145.7891" y2="2145.7891"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="445.8125" x2="445.8125" y1="2145.7891" y2="2167.7891"/><polygon fill="#A80036" points="441.8125,2157.7891,445.8125,2167.7891,449.8125,2157.7891,445.8125,2161.7891" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="685.3125" x2="816.8125" y1="2145.7891" y2="2145.7891"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="816.8125" x2="816.8125" y1="2145.7891" y2="2167.7891"/><polygon fill="#A80036" points="812.8125,2157.7891,816.8125,2167.7891,820.8125,2157.7891,816.8125,2161.7891" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="631.3125" x2="631.3125" y1="2113.7891" y2="2133.7891"/><polygon fill="#A80036" points="627.3125,2123.7891,631.3125,2133.7891,635.3125,2123.7891,631.3125,2127.7891" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[afafd38710d9a052946de087a4cad58a] +@startuml + +title requestLease4 algorithm (Kea 1.8.0) + +start +:get lease for the client; + +if (reserved address) then (yes) + if (requested address) then (no) + :requested address = reserved address; + else (yes) + if (requested address is reserved for another client) then (yes) + :return no lease; + stop + else (no) + endif + endif + if (lease for requested address) then (yes) + if (active and owned by another client) then (yes) + :return no lease; + stop + else (no) + endif + else (no) + endif + if (requested address == reserved address) then (no) + if (lease for requested address) then (yes) + if (active) then (yes) + :return no lease; + stop + else (no) + endif + else (no) + endif + if (requested address in allowed pool) then (no) + :return no lease; + stop + else (yes) + endif + else (yes) + endif + +else (no) + + if (requested address) then (yes) + if (requested address is reserved for another client) then (yes) + :return no lease; + stop + else (no) + endif + if (lease for requested address) then (yes) + if (active and owned by another client) then (yes) + :return no lease; + stop + else (no) + endif + else (no) + endif + if (requested address in allowed pool) then (no) + :return no lease; + stop + else (yes) + endif + else (no) + if (client lease and lease address in allowed pool) then (no) + while (iterate over pools and subnets) + :pick candidate address; + if (candidate is reserved for another client) then (no) + if (candidate is used by another thread) then (no) + if (lease for candidate) then (no) + :create and return new lease; + stop + else (yes) + if (expired) then (yes) + :reclaim expired lease; + :update lease information; + :callout lease4_select; + if (callout return) then (SKIP) + :return no lease; + stop + else (CONTINUE) + :update lease; + :return reused lease; + stop + endif + else (no) + endif + endif + else (yes) + endif + else (yes) + endif + endwhile + :maximum attempts; + :return no lease; + stop + else (yes) + endif + endif +endif + +' after check +if (client lease) then (yes) + if (no requested address or requested address == client lease address) then (yes) + if (has reserved address or client lease address in allowed pool) then (yes) + :update lease information; + if (old lease expired) then (yes) + :reclaim expired lease; + else (no) + endif + :callout lease4_renew; + if (callout return) then (SKIP) + :return old client lease; + stop + else (CONTINUE) + :update lease; + :return renewed client lease; + stop + endif + else (no) + endif + else (no) + endif +else (no) +endif + +:get lease for requested address; +if (requested lease) then (yes) + if (expired) then (no) + :return no lease; + stop + else (yes) + :reclaim expired lease; + :update lease information; + :callout lease4_select; + if (callout return) then (SKIP) + :return no lease; + stop + else (CONTINUE) + :update lease; + :return reused lease; + stop + endif + endif +else (no) + :create and return new lease; + stop +endif + +@enduml + +@startuml + +title requestLease4 algorithm (Kea 1.8.0) + +start +:get lease for the client; + +if (reserved address) then (yes) + if (requested address) then (no) + :requested address = reserved address; + else (yes) + if (requested address is reserved for another client) then (yes) + :return no lease; + stop + else (no) + endif + endif + if (lease for requested address) then (yes) + if (active and owned by another client) then (yes) + :return no lease; + stop + else (no) + endif + else (no) + endif + if (requested address == reserved address) then (no) + if (lease for requested address) then (yes) + if (active) then (yes) + :return no lease; + stop + else (no) + endif + else (no) + endif + if (requested address in allowed pool) then (no) + :return no lease; + stop + else (yes) + endif + else (yes) + endif + +else (no) + + if (requested address) then (yes) + if (requested address is reserved for another client) then (yes) + :return no lease; + stop + else (no) + endif + if (lease for requested address) then (yes) + if (active and owned by another client) then (yes) + :return no lease; + stop + else (no) + endif + else (no) + endif + if (requested address in allowed pool) then (no) + :return no lease; + stop + else (yes) + endif + else (no) + if (client lease and lease address in allowed pool) then (no) + while (iterate over pools and subnets) + :pick candidate address; + if (candidate is reserved for another client) then (no) + if (candidate is used by another thread) then (no) + if (lease for candidate) then (no) + :create and return new lease; + stop + else (yes) + if (expired) then (yes) + :reclaim expired lease; + :update lease information; + :callout lease4_select; + if (callout return) then (SKIP) + :return no lease; + stop + else (CONTINUE) + :update lease; + :return reused lease; + stop + endif + else (no) + endif + endif + else (yes) + endif + else (yes) + endif + endwhile + :maximum attempts; + :return no lease; + stop + else (yes) + endif + endif +endif + +if (client lease) then (yes) + if (no requested address or requested address == client lease address) then (yes) + if (has reserved address or client lease address in allowed pool) then (yes) + :update lease information; + if (old lease expired) then (yes) + :reclaim expired lease; + else (no) + endif + :callout lease4_renew; + if (callout return) then (SKIP) + :return old client lease; + stop + else (CONTINUE) + :update lease; + :return renewed client lease; + stop + endif + else (no) + endif + else (no) + endif +else (no) +endif + +:get lease for requested address; +if (requested lease) then (yes) + if (expired) then (no) + :return no lease; + stop + else (yes) + :reclaim expired lease; + :update lease information; + :callout lease4_select; + if (callout return) then (SKIP) + :return no lease; + stop + else (CONTINUE) + :update lease; + :return reused lease; + stop + endif + endif +else (no) + :create and return new lease; + stop +endif + +@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/sphinx/uml/requestLease4.uml b/doc/sphinx/uml/requestLease4.uml new file mode 100644 index 0000000..4cb55b5 --- /dev/null +++ b/doc/sphinx/uml/requestLease4.uml @@ -0,0 +1,150 @@ +@startuml + +title requestLease4 algorithm (Kea 1.8.0) + +start +:get lease for the client; + +if (reserved address) then (yes) + if (requested address) then (no) + :requested address = reserved address; + else (yes) + if (requested address is reserved for another client) then (yes) + :return no lease; + stop + else (no) + endif + endif + if (lease for requested address) then (yes) + if (active and owned by another client) then (yes) + :return no lease; + stop + else (no) + endif + else (no) + endif + if (requested address == reserved address) then (no) + if (lease for requested address) then (yes) + if (active) then (yes) + :return no lease; + stop + else (no) + endif + else (no) + endif + if (requested address in allowed pool) then (no) + :return no lease; + stop + else (yes) + endif + else (yes) + endif + +else (no) + + if (requested address) then (yes) + if (requested address is reserved for another client) then (yes) + :return no lease; + stop + else (no) + endif + if (lease for requested address) then (yes) + if (active and owned by another client) then (yes) + :return no lease; + stop + else (no) + endif + else (no) + endif + if (requested address in allowed pool) then (no) + :return no lease; + stop + else (yes) + endif + else (no) + if (client lease and lease address in allowed pool) then (no) + while (iterate over pools and subnets) + :pick candidate address; + if (candidate is reserved for another client) then (no) + if (candidate is used by another thread) then (no) + if (lease for candidate) then (no) + :create and return new lease; + stop + else (yes) + if (expired) then (yes) + :reclaim expired lease; + :update lease information; + :callout lease4_select; + if (callout return) then (SKIP) + :return no lease; + stop + else (CONTINUE) + :update lease; + :return reused lease; + stop + endif + else (no) + endif + endif + else (yes) + endif + else (yes) + endif + endwhile + :maximum attempts; + :return no lease; + stop + else (yes) + endif + endif +endif + +' after check +if (client lease) then (yes) + if (no requested address or requested address == client lease address) then (yes) + if (has reserved address or client lease address in allowed pool) then (yes) + :update lease information; + if (old lease expired) then (yes) + :reclaim expired lease; + else (no) + endif + :callout lease4_renew; + if (callout return) then (SKIP) + :return old client lease; + stop + else (CONTINUE) + :update lease; + :return renewed client lease; + stop + endif + else (no) + endif + else (no) + endif +else (no) +endif + +:get lease for requested address; +if (requested lease) then (yes) + if (expired) then (no) + :return no lease; + stop + else (yes) + :reclaim expired lease; + :update lease information; + :callout lease4_select; + if (callout return) then (SKIP) + :return no lease; + stop + else (CONTINUE) + :update lease; + :return reused lease; + stop + endif + endif +else (no) + :create and return new lease; + stop +endif + +@enduml diff --git a/doc/sphinx/uml/select4.png b/doc/sphinx/uml/select4.png Binary files differnew file mode 100644 index 0000000..a89f54c --- /dev/null +++ b/doc/sphinx/uml/select4.png diff --git a/doc/sphinx/uml/select4.svg b/doc/sphinx/uml/select4.svg new file mode 100644 index 0000000..a2b5ed6 --- /dev/null +++ b/doc/sphinx/uml/select4.svg @@ -0,0 +1,157 @@ +<?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="2210px" preserveAspectRatio="none" style="width:1468px;height:2210px;" version="1.1" viewBox="0 0 1468 2210" width="1468px" zoomAndPan="magnify"><defs><filter height="300%" id="f5nw3f4rb2pkr" 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="317" x="566.5" y="17.4023">DHCPv4 subnet selection (Kea 1.8.0)</text><!--MD5=[73860abe08ab23c9b8e49eb23f18ae46] +cluster relayed--><rect fill="#FFFFFF" filter="url(#f5nw3f4rb2pkr)" height="374.86" style="stroke: #000000; stroke-width: 1.5;" width="445" x="7" y="329.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56" x="201.5" y="344.7344">Relayed</text><!--MD5=[234613e222536af9475ae40e3492b0e6] +cluster set_address--><rect fill="#FFFFFF" filter="url(#f5nw3f4rb2pkr)" height="164.86" style="stroke: #000000; stroke-width: 1.5;" width="803" x="227" y="769.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="164" x="546.5" y="784.5944">Set address for lookup</text><!--MD5=[a59c1d05a8f6fb54290705d41e67acbe] +cluster interface--><rect fill="#FFFFFF" filter="url(#f5nw3f4rb2pkr)" height="488" style="stroke: #000000; stroke-width: 1.5;" width="395" x="945" y="990.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="164" x="1060.5" y="1006.4544">Try incoming interface</text><!--MD5=[8f3f5adf9176dbd9c419c05d483ab0c6] +cluster address--><rect fill="#FFFFFF" filter="url(#f5nw3f4rb2pkr)" height="294" style="stroke: #000000; stroke-width: 1.5;" width="190" x="745" y="1527.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="85" x="797.5" y="1543.4544">Try address</text><!--MD5=[aeb2f621969028d4547d386ac1a1ba6d] +entity relay_subnet--><rect fill="#FEFECE" filter="url(#f5nw3f4rb2pkr)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="226" x="172" y="418.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="206" x="182" y="441.5944">Relay address matches subnet</text><!--MD5=[bf459b32eaaf498e62edf6d622ac5891] +entity relay_network--><rect fill="#FEFECE" filter="url(#f5nw3f4rb2pkr)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="286" x="142" y="531.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="266" x="152" y="554.5944">Relay address matches shared network</text><!--MD5=[076bfff500cab59e856b606fdf63ed5a] +entity relay_class--><rect fill="#FEFECE" filter="url(#f5nw3f4rb2pkr)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="140" x="112" y="644.0592"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="120" x="122" y="667.5944">Check client class</text><!--MD5=[467e96f12fdeb7da53b220e72b6eb1fc] +entity relay_address--><rect fill="#FEFECE" filter="url(#f5nw3f4rb2pkr)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="136" x="251" y="873.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="116" x="261" y="897.4544">Set relay address</text><!--MD5=[a0e4201c97a623c3dfa593fb75aad03b] +entity client_address--><rect fill="#FEFECE" filter="url(#f5nw3f4rb2pkr)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="140" x="553" y="873.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="120" x="563" y="897.4544">Set client address</text><!--MD5=[a2d7389029b0dd04029e629f1661a883] +entity source_address--><rect fill="#FEFECE" filter="url(#f5nw3f4rb2pkr)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="149" x="856.5" y="873.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="129" x="866.5" y="897.4544">Set source address</text><!--MD5=[8eaa1e77cbee43fcac8de4e493864e04] +entity interface_subnet--><rect fill="#FEFECE" filter="url(#f5nw3f4rb2pkr)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="192" x="997" y="1025.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="172" x="1007" y="1049.4544">Interface matches subnet</text><!--MD5=[44eac5a65cc5cd7e6cc1fc4b89b09f4d] +entity interface_network--><rect fill="#FEFECE" filter="url(#f5nw3f4rb2pkr)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="252" x="1072" y="1138.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="232" x="1082" y="1162.4544">Interface matches shared network</text><!--MD5=[8e51806cb27b2b60db022c6084a961c9] +entity interface_class--><rect fill="#FEFECE" filter="url(#f5nw3f4rb2pkr)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="140" x="1022" y="1251.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="120" x="1032" y="1275.4544">Check client class</text><!--MD5=[953883d00ea10db133fca33539954fed] +entity interface_address--><rect fill="#FEFECE" filter="url(#f5nw3f4rb2pkr)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="163" x="961.5" y="1426.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="143" x="971.5" y="1450.4544">Set interface address</text><!--MD5=[132ec46735878e55c0250b14c07769ad] +entity inRange--><rect fill="#FEFECE" filter="url(#f5nw3f4rb2pkr)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="158" x="761" y="1562.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="138" x="771" y="1586.4544">Check subnet prefix</text><!--MD5=[a34f95003b379bc2f5b7f1af307bcb98] +entity address_class--><rect fill="#FEFECE" filter="url(#f5nw3f4rb2pkr)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="140" x="779" y="1769.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="120" x="789" y="1793.4544">Check client class</text><!--MD5=[e3476fda087b0512b1cf4e3a66ca5e59] +entity entry--><rect fill="#FEFECE" filter="url(#f5nw3f4rb2pkr)" 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(#f5nw3f4rb2pkr)" 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=[6d8910fd8533ab76ffd986c0d960248c] +entity subnet_select--><rect fill="#FEFECE" filter="url(#f5nw3f4rb2pkr)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="207" x="294.5" y="222.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="187" x="304.5" y="245.7344">Try subnet selection option</text><!--MD5=[6348f6d706001cc5dc6ed638bec44faf] +entity found--><rect fill="#FEFECE" filter="url(#f5nw3f4rb2pkr)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="127" x="708.5" y="1946.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="107" x="718.5" y="1970.4544">Found a subnet</text><!--MD5=[7dc9e356e22f2f113ceeb6da807ce9ff] +entity not_found--><rect fill="#FEFECE" filter="url(#f5nw3f4rb2pkr)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="137" x="870.5" y="1946.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="117" x="880.5" y="1970.4544">Found no subnet</text><!--MD5=[4a9142d0fee9ff77eb50a001ac7877e7] +entity subnet4_select--><rect fill="#FEFECE" filter="url(#f5nw3f4rb2pkr)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="175" x="767.5" y="2043.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="155" x="777.5" y="2067.4544">Callout subnet4_select</text><!--MD5=[d0fdc5cb89e99cab1ccfec009231794d] +entity success--><rect fill="#FEFECE" filter="url(#f5nw3f4rb2pkr)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="129" x="584.5" y="2156.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="109" x="594.5" y="2180.4544">Return a subnet</text><!--MD5=[d0255a03afa46a62fe0c456dae837167] +entity no_subnet--><rect fill="#FEFECE" filter="url(#f5nw3f4rb2pkr)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="139" x="785.5" y="2156.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="119" x="795.5" y="2180.4544">Return no subnet</text><!--MD5=[c92710f32fe9c293a125fb7e80204a05] +entity drop--><rect fill="#FEFECE" filter="url(#f5nw3f4rb2pkr)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="97" x="986.5" y="2156.9192"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="77" x="996.5" y="2180.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=[f0b6d7b08c058a6efc1e3a3886382c22] +link rai_link_select to subnet_select--><path d="M398,161.6192 C398,177.1592 398,199.9792 398,216.8592 " fill="none" id="rai_link_select->subnet_select" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="398,221.8892,402,212.8892,398,216.8892,394,212.8892,398,221.8892" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[2989df9457f995d9ec76378f9e46e3a6] +link subnet_select to relayed--><path d="M389.65,258.5692 C382.075,274.3142 370.655,298.0567 361.01,318.1092 C359.8044,320.6158 358.6265,323.0647 357.4873,325.4331 C356.9177,326.6173 356.3578,327.7814 355.8089,328.9225 " fill="none" id="subnet_select->relayed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="355.8089,328.9225,363.3147,322.5458,357.9762,324.4167,356.1053,319.0781,355.8089,328.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="301.7676">relayed</text><!--MD5=[19a01d6111b1c934e32249a327a2afa6] +link subnet_select to set_address--><path d="M433.44,258.3692 C466.58,277.1792 511,310.7592 511,355.5592 C511,355.5592 511,355.5592 511,663.0592 C511,711.2292 468.365,744.0467 425.0638,764.9542 C422.3574,766.2609 419.6485,767.5211 416.9472,768.7356 " fill="none" id="subnet_select->set_address" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="416.9472,768.7356,426.796,768.6933,421.5075,766.6853,423.5155,761.3968,416.9472,768.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="497.6276">not relayed</text><!--MD5=[289599dfcd7d1f32272e42cc3c26c895] +link relayed to relay_subnet--><path d="M342.96,357.1192 C341.81,358.6492 317.61,391.2092 300.84,413.7592 " fill="none" id="relayed->relay_subnet" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="297.8,417.8392,306.3807,413.0049,300.784,413.8273,299.9616,408.2305,297.8,417.8392" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[65c9b407d2d4ddf1b89c397faeac317e] +link relay_subnet to relay_network--><path d="M285,454.3992 C285,473.6292 285,504.6892 285,525.7192 " fill="none" id="relay_subnet->relay_network" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="285,530.8392,289,521.8392,285,525.8392,281,521.8392,285,530.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="497.6276">no match</text><!--MD5=[918f6d4a891df42092f9be64f359f985] +link relay_subnet to relay_class--><path d="M199.58,454.0892 C156.79,467.3892 108.74,490.6992 83,531.0592 C56.99,571.8592 109.58,615.9992 147.59,640.9192 " fill="none" id="relay_subnet->relay_class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="152.15,643.8592,146.7424,635.6277,147.9441,641.1554,142.4164,642.3571,152.15,643.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="554.1276">match</text><!--MD5=[ec56da742308e5dcfe86ad0421278606] +link relay_network to set_address--><path d="M288.52,567.3092 C294.12,594.7992 305.4675,650.4892 315.5475,699.9592 C320.5875,724.6942 325.3106,747.8742 328.84,765.1967 C329.0606,766.2794 329.2765,767.3392 329.4876,768.375 " fill="none" id="relay_network->set_address" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="329.4876,768.375,331.6103,758.7576,328.4893,763.4756,323.7713,760.3547,329.4876,768.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="667.1276">no match</text><!--MD5=[a30462b61ddf59585f12c8e1078496e0] +link relay_network to relay_class--><path d="M268.91,567.3992 C250.69,587.0392 221.02,619.0092 201.5,640.0392 " fill="none" id="relay_network->relay_class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="197.98,643.8392,207.0376,639.9713,201.3844,640.1773,201.1785,634.5242,197.98,643.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="610.6276">match</text><!--MD5=[44feab40ce9c0df31465bdb13adac7ed] +link relay_class to found--><path d="M177.97,680.0792 C172.39,705.1692 163,753.6292 163,795.4192 C163,795.4192 163,795.4192 163,1878.4192 C163,1932.4492 543.78,1954.4892 703.15,1961.3492 " fill="none" id="relay_class->found" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="708.26,1961.5692,699.4395,1957.1875,703.2646,1961.3551,699.097,1965.1802,708.26,1961.5692" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="70" x="164" y="1362.4876">compatible</text><!--MD5=[d5e1893c7bc3c7589901f4b78d6439f0] +link relay_class to set_address--><path d="M185.6,680.2592 C190.22,698.4992 199.91,727.0992 218,745.0592 C222.9438,749.9667 228.4423,754.4291 234.2844,758.4815 C237.2054,760.5077 240.2123,762.4314 243.2786,764.2571 C244.8117,765.1699 246.3597,766.0582 247.9193,766.9226 C248.6991,767.3547 249.4818,767.7809 250.2669,768.2012 C250.6595,768.4113 251.0527,768.6199 251.4464,768.8271 " fill="none" id="relay_class->set_address" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="251.4464,768.8271,245.3441,761.0965,247.0215,766.499,241.6191,768.1764,251.4464,768.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="741.6276">not compatible</text><!--MD5=[3f679d64a1cccee12b0e824b1733c0ed] +link set_address to relay_address--><path d="M334.99,796.9892 C334.66,798.9192 327.44,841.3492 322.81,868.5092 " fill="none" id="set_address->relay_address" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="321.93,873.7292,327.3899,865.5323,322.7728,868.8008,319.5043,864.1837,321.93,873.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="840.4876">try the relay address</text><!--MD5=[9d0435cdb5bba0d446c223c46240db6f] +link relay_address to client_address--><path d="M387.22,891.9192 C434.95,891.9192 498.7,891.9192 547.88,891.9192 " fill="none" id="relay_address->client_address" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="552.9,891.9192,543.9,887.9192,547.9,891.9192,543.9,895.9192,552.9,891.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="885.4876">has no relay address</text><!--MD5=[4192df04ddbb3f1e00a57ee174f51cdb] +link client_address to source_address--><path d="M693.28,891.9192 C740.3,891.9192 802.28,891.9192 851.17,891.9192 " fill="none" id="client_address->source_address" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="856.46,891.9192,847.46,887.9192,851.46,891.9192,847.46,895.9192,856.46,891.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="885.4876">has no client address</text><!--MD5=[1cd4e848379fc555ffa76a6d3111f3fb] +link source_address to interface_subnet--><path d="M949.58,910.1292 C979.61,937.9292 1038.68,992.6192 1070.85,1022.4092 " fill="none" id="source_address->interface_subnet" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1074.63,1025.9092,1070.7255,1016.8674,1070.9543,1022.5196,1065.3021,1022.7484,1074.63,1025.9092" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="123" x="1017" y="971.4876">no suitable address</text><!--MD5=[a29ca77fdc41863d51ecafa8e32dcb85] +link relay_address to inRange--><path d="M319,910.0192 C319,937.8592 319,994.7392 319,1042.9192 C319,1042.9192 319,1042.9192 319,1445.9192 C319,1534.9892 608.22,1565.7192 755.69,1575.5992 " fill="none" id="relay_address->inRange" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="760.87,1575.9392,752.1525,1571.356,755.8808,1575.6104,751.6264,1579.3387,760.87,1575.9392" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="120" x="320" y="1274.9876">has a relay address</text><!--MD5=[bf38c5431748c4414750c7275409615d] +link client_address to inRange--><path d="M598.14,910.0992 C565.15,935.1492 511,985.0692 511,1042.9192 C511,1042.9192 511,1042.9192 511,1445.9192 C511,1498.7592 658.41,1540.8992 755.88,1562.9892 " fill="none" id="client_address->inRange" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="760.78,1564.0892,752.8657,1558.2272,755.8997,1563.0015,751.1254,1566.0356,760.78,1564.0892" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="125" x="512" y="1274.9876">has a client address</text><!--MD5=[306377b471c1f30003804df3ba3e4280] +link source_address to inRange--><path d="M856.74,909.9992 C791.87,929.8492 708,969.6692 708,1042.9192 C708,1042.9192 708,1042.9192 708,1445.9192 C708,1498.6392 760.49,1538.1592 799.27,1560.1592 " fill="none" id="source_address->inRange" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="803.93,1562.7492,798.0248,1554.8671,799.5653,1560.3101,794.1222,1561.8506,803.93,1562.7492" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="219" x="709" y="1274.9876">has source address and use unicast</text><!--MD5=[4c5f9760336ab58778079bb174cbf5f0] +link interface_subnet to not_found--><path d="M1183.41,1061.9192 C1267.54,1080.3992 1380,1113.1092 1380,1155.9192 C1380,1155.9192 1380,1155.9192 1380,1878.4192 C1380,1952.2692 1138.67,1963.6392 1013.06,1964.5692 " fill="none" id="interface_subnet->not_found" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1007.91,1964.5992,1016.9327,1968.5477,1012.9099,1964.5706,1016.887,1960.5479,1007.91,1964.5992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="75" x="1381" y="1508.4876">no interface</text><!--MD5=[f6d146b568a537518d52dd0109d2cafd] +link interface_subnet to interface_class--><path d="M1071.84,1062.1092 C1052.58,1079.2392 1025.46,1107.4692 1014,1138.9192 C998.88,1180.3992 1037.07,1223.3392 1065.19,1248.0092 " fill="none" id="interface_subnet->interface_class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1069.26,1251.5192,1065.0657,1242.6081,1065.4768,1248.25,1059.835,1248.6612,1069.26,1251.5192" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="39" x="1015" y="1161.9876">match</text><!--MD5=[8c73b6f253b7f8003f1aeec9d3e2c401] +link interface_subnet to interface_network--><path d="M1109.41,1062.2592 C1127.98,1081.8992 1158.22,1113.8692 1178.12,1134.8992 " fill="none" id="interface_subnet->interface_network" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1181.71,1138.6992,1178.417,1129.4172,1178.2685,1135.0721,1172.6136,1134.9236,1181.71,1138.6992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="59" x="1152" y="1105.4876">no match</text><!--MD5=[8a490629b42afa0a067bde343f0409be] +link interface_network to interface_class--><path d="M1181.44,1175.2592 C1162.69,1194.8992 1132.15,1226.8692 1112.07,1247.8992 " fill="none" id="interface_network->interface_class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1108.45,1251.6992,1117.5542,1247.9424,1111.899,1248.0792,1111.7622,1242.424,1108.45,1251.6992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="39" x="1152" y="1218.4876">march</text><!--MD5=[e1288d340d0c431aabe10a4c239c74f7] +link interface_network to not_found--><path d="M1216.94,1175.1492 C1237.06,1195.4392 1266,1231.1792 1266,1268.9192 C1266,1268.9192 1266,1268.9192 1266,1878.4192 C1266,1930.4492 1109.1,1951.4192 1012.67,1959.3992 " fill="none" id="interface_network->not_found" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1007.55,1959.8192,1016.8511,1963.058,1012.5327,1959.404,1016.1867,1955.0856,1007.55,1959.8192" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="59" x="1267" y="1585.9876">no match</text><!--MD5=[9d13a96273b9c1dbfb8a7fbd997b0088] +link interface_class to found--><path d="M1111.94,1288.2092 C1127.1,1302.7092 1146.84,1324.8592 1156,1348.9192 C1203,1472.3792 1160.06,1514.0492 1168,1645.9192 C1169,1662.6092 1171,1666.6992 1171,1683.4192 C1171,1683.4192 1171,1683.4192 1171,1878.4192 C1171,1879.4592 954.79,1925.2992 840.68,1949.4192 " fill="none" id="interface_class->found" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="835.66,1950.4792,845.2955,1952.5181,840.5505,1949.4384,843.6302,1944.6934,835.66,1950.4792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="70" x="1169" y="1642.4876">compatible</text><!--MD5=[d4a81a9eb6ae9754c2f91708a00f90ba] +link interface_class to interface_address--><path d="M1081.97,1287.9492 C1073.39,1303.3492 1061.43,1326.9092 1055,1348.9192 C1047.93,1373.1292 1045.02,1402.0192 1043.83,1421.5292 " fill="none" id="interface_class->interface_address" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1043.54,1426.7692,1048.0484,1418.0128,1043.8261,1421.7774,1040.0615,1417.5551,1043.54,1426.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="1362.4876">not compatible</text><!--MD5=[18f0036984a219b8e279d39e6955cbb3] +link interface_address to inRange--><path d="M961.24,1454.9892 C910.72,1462.4692 852.64,1475.1192 837,1494.9192 C823.19,1512.3892 826.7,1538.7792 831.91,1557.5092 " fill="none" id="interface_address->inRange" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="833.41,1562.5792,834.6953,1552.8146,831.993,1557.7842,827.0233,1555.0818,833.41,1562.5792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="153" x="838" y="1508.4876">has an interface address</text><!--MD5=[1be935c2e674a39bb491f742257146af] +link interface_address to not_found--><path d="M1037.7,1463.0692 C1030.36,1488.3792 1018,1537.3192 1018,1579.9192 C1018,1579.9192 1018,1579.9192 1018,1878.4192 C1018,1906.2692 995.11,1928.9092 973.97,1943.8892 " fill="none" id="interface_address->not_found" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="969.77,1946.7792,979.4482,1944.9538,973.8835,1943.9369,974.9005,1938.3722,969.77,1946.7792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="128" x="1019" y="1736.4876">no interface address</text><!--MD5=[65c872516cd5acbef394f498ee60e6f6] +link inRange to address_class--><path d="M840.75,1599.0492 C842.38,1636.0492 846.21,1723.4492 848.02,1764.6692 " fill="none" id="inRange->address_class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="848.24,1769.6992,851.8498,1760.5358,848.0253,1764.7038,843.8572,1760.8793,848.24,1769.6992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="39" x="845" y="1689.4876">match</text><!--MD5=[c6a81dd9b5c38fb7a31992aeb43efba5] +link inRange to not_found--><path d="M768.39,1598.9792 C726.98,1613.5792 683,1639.4392 683,1683.4192 C683,1683.4192 683,1683.4192 683,1878.4192 C683,1897.7892 789.82,1927.8092 865.46,1946.6392 " fill="none" id="inRange->not_found" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="870.4,1947.8692,862.6221,1941.8274,865.5459,1946.67,860.7033,1949.5938,870.4,1947.8692" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="59" x="684" y="1792.9876">no match</text><!--MD5=[6bbdb059bb8431be14feb2edf9179bcc] +link address_class to found--><path d="M815.7,1805.9392 C765.48,1832.3692 674.36,1883.6192 657,1915.9192 C644.07,1939.9792 671.86,1951.9792 703.35,1957.9692 " fill="none" id="address_class->found" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="708.43,1958.8792,700.2794,1953.3504,703.5088,1957.9948,698.8644,1961.2243,708.43,1958.8792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="70" x="708" y="1882.4876">compatible</text><!--MD5=[6fa859304e08ed6b1a2f69b396a973f6] +link address_class to not_found--><path d="M856.62,1805.9192 C865.47,1825.4292 880.68,1858.2892 895,1885.9192 C904.99,1905.1792 917.16,1926.6292 926.17,1942.1492 " fill="none" id="address_class->not_found" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="928.86,1946.7592,927.7843,1936.9693,926.3424,1942.4393,920.8724,1940.9974,928.86,1946.7592" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="95" x="896" y="1882.4876">not compatible</text><!--MD5=[920af236d2bfe8ac015294b6ec32c751] +link found to subnet4_select--><path d="M787.22,1983.3392 C801.03,1999.1492 821.43,2022.4892 836.24,2039.4392 " fill="none" id="found->subnet4_select" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="839.87,2043.6092,836.9563,2034.2012,836.5785,2039.8454,830.9343,2039.4676,839.87,2043.6092" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[be5a985c5094547d1aa8a3dfda06631d] +link not_found to subnet4_select--><path d="M923.59,1983.3392 C909.62,1999.1492 888.98,2022.4892 873.99,2039.4392 " fill="none" id="not_found->subnet4_select" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="870.31,2043.6092,879.2712,2039.523,873.6247,2039.8659,873.2818,2034.2194,870.31,2043.6092" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[085d72d70044aeb14e8d963046e88b11] +link found to not_found--><!--MD5=[d0da1e00427a0ca7837196c7dddb3af4] +link subnet4_select to success--><path d="M767.05,2070.2692 C735.7,2076.7092 702,2088.4992 677,2109.9192 C664.53,2120.5992 657.42,2137.8792 653.49,2151.7992 " fill="none" id="subnet4_select->success" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="652.18,2156.7492,658.3343,2149.0599,653.4497,2151.9131,650.5965,2147.0285,652.18,2156.7492" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="164" x="678" y="2123.4876">CONTINUE and subnet set</text><!--MD5=[48d8edc0219dd4d7c3847b4159c280ef] +link subnet4_select to no_subnet--><path d="M853.62,2080.3192 C852.99,2089.1692 852.31,2100.1092 852,2109.9192 C851.56,2123.8292 852.26,2139.4292 853.1,2151.7492 " fill="none" id="subnet4_select->no_subnet" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="853.47,2156.8092,856.8167,2147.5464,853.1127,2151.822,848.8372,2148.118,853.47,2156.8092" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="138" x="853" y="2123.4876">SKIP or subnet not set</text><!--MD5=[f590b573e48b5dfdcd1774729941f83a] +link subnet4_select to drop--><path d="M938.2,2080.0192 C958.54,2086.9392 979.25,2096.5792 996,2109.9192 C1009.78,2120.8892 1019.89,2138.1592 1026.36,2151.9892 " fill="none" id="subnet4_select->drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1028.58,2156.9192,1028.5229,2147.0705,1026.5228,2152.362,1021.2313,2150.362,1028.58,2156.9192" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="35" x="1012" y="2123.4876">DROP</text><!--MD5=[ac540f98c992b562d25c0989cf3dd0fa] +@startuml + +title DHCPv4 subnet selection (Kea 1.8.0) + +agent "Entry point" as entry + +agent "Try RAI link select" as rai_link_select + +agent "Try subnet selection option" as subnet_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 matches 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 - -> subnet_select +subnet_select - -> relayed : relayed +subnet_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 address +relay_address -r-> client_address : has no relay address +client_address -r-> source_address : has no client address +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 address 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 + +@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/sphinx/uml/select4.uml b/doc/sphinx/uml/select4.uml new file mode 100644 index 0000000..ed8b65c --- /dev/null +++ b/doc/sphinx/uml/select4.uml @@ -0,0 +1,85 @@ +@startuml + +title DHCPv4 subnet selection (Kea 1.8.0) + +agent "Entry point" as entry + +agent "Try RAI link select" as rai_link_select + +agent "Try subnet selection option" as subnet_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 matches 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 --> subnet_select +subnet_select --> relayed : relayed +subnet_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 address +relay_address -r-> client_address : has no relay address +client_address -r-> source_address : has no client address +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 address 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 + +@enduml diff --git a/doc/sphinx/uml/tkey.png b/doc/sphinx/uml/tkey.png Binary files differnew file mode 100644 index 0000000..c10ec7c --- /dev/null +++ b/doc/sphinx/uml/tkey.png diff --git a/doc/sphinx/uml/tkey.svg b/doc/sphinx/uml/tkey.svg new file mode 100644 index 0000000..6bfb43f --- /dev/null +++ b/doc/sphinx/uml/tkey.svg @@ -0,0 +1,21 @@ +<?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="197px" preserveAspectRatio="none" style="width:308px;height:197px;background:#FFFFFF;" version="1.1" viewBox="0 0 308 197" width="308px" zoomAndPan="magnify"><defs><filter height="300%" id="fz1ehskz14z05" 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="spacing" textLength="283" x="9" y="29.4023">TKEY Exchange (GSS-TSIG hook)</text><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="70.5" x2="70.5" y1="75.6875" y2="154.3086"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="240.5" x2="240.5" y1="75.6875" y2="154.3086"/><rect fill="#FEFECE" filter="url(#fz1ehskz14z05)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="108" x="14.5" y="40.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="94" x="21.5" y="60.7344">Kea D2 server</text><rect fill="#FEFECE" filter="url(#fz1ehskz14z05)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="108" x="14.5" y="153.3086"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="94" x="21.5" y="173.8438">Kea D2 server</text><rect fill="#FEFECE" filter="url(#fz1ehskz14z05)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="88" x="194.5" y="40.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="74" x="201.5" y="60.7344">DNS server</text><rect fill="#FEFECE" filter="url(#fz1ehskz14z05)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="88" x="194.5" y="153.3086"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="74" x="201.5" y="173.8438">DNS server</text><polygon fill="#A80036" points="228.5,102.998,238.5,106.998,228.5,110.998,232.5,106.998" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="70.5" x2="234.5" y1="106.998" y2="106.998"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="82" x="77.5" y="102.2559">TKEY request</text><polygon fill="#A80036" points="81.5,132.3086,71.5,136.3086,81.5,140.3086,77.5,136.3086" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="75.5" x2="239.5" y1="136.3086" y2="136.3086"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="146" x="87.5" y="131.5664">TKEY response (signed)</text><!--MD5=[7d4889a5feeb1588c9f7e0e768327f46] +@startuml
+
+title TKEY Exchange (GSS-TSIG hook)
+
+participant "Kea D2 server" as Kea
+participant "DNS server" as DNS
+
+Kea -> DNS: TKEY request
+DNS -> Kea: TKEY response (signed)
+
+@enduml
+ +PlantUML version 1.2021.9(Sun Jul 25 12:13:56 CEST 2021) +(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/sphinx/uml/tkey.uml b/doc/sphinx/uml/tkey.uml new file mode 100644 index 0000000..4cc33e5 --- /dev/null +++ b/doc/sphinx/uml/tkey.uml @@ -0,0 +1,11 @@ +@startuml + +title TKEY Exchange (GSS-TSIG hook) + +participant "Kea D2 server" as Kea +participant "DNS server" as DNS + +Kea -> DNS: TKEY request +DNS -> Kea: TKEY response (signed) + +@enduml diff --git a/doc/sphinx/uml/update.png b/doc/sphinx/uml/update.png Binary files differnew file mode 100644 index 0000000..9b0520e --- /dev/null +++ b/doc/sphinx/uml/update.png diff --git a/doc/sphinx/uml/update.svg b/doc/sphinx/uml/update.svg new file mode 100644 index 0000000..7fb4947 --- /dev/null +++ b/doc/sphinx/uml/update.svg @@ -0,0 +1,21 @@ +<?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="197px" preserveAspectRatio="none" style="width:367px;height:197px;background:#FFFFFF;" version="1.1" viewBox="0 0 367 197" width="367px" zoomAndPan="magnify"><defs><filter height="300%" id="f1k5dkaewnu0nj" 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="spacing" textLength="342" x="9" y="29.4023">DNS Update Exchange (GSS-TSIG hook)</text><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="78.5" x2="78.5" y1="75.6875" y2="154.3086"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="291.5" x2="291.5" y1="75.6875" y2="154.3086"/><rect fill="#FEFECE" filter="url(#f1k5dkaewnu0nj)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="108" x="22.5" y="40.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="94" x="29.5" y="60.7344">Kea D2 server</text><rect fill="#FEFECE" filter="url(#f1k5dkaewnu0nj)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="108" x="22.5" y="153.3086"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="94" x="29.5" y="173.8438">Kea D2 server</text><rect fill="#FEFECE" filter="url(#f1k5dkaewnu0nj)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="88" x="245.5" y="40.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="74" x="252.5" y="60.7344">DNS server</text><rect fill="#FEFECE" filter="url(#f1k5dkaewnu0nj)" height="30.4883" style="stroke:#A80036;stroke-width:1.5;" width="88" x="245.5" y="153.3086"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="74" x="252.5" y="173.8438">DNS server</text><polygon fill="#A80036" points="279.5,102.998,289.5,106.998,279.5,110.998,283.5,106.998" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="78.5" x2="285.5" y1="106.998" y2="106.998"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="179" x="85.5" y="102.2559">DNS update request (signed)</text><polygon fill="#A80036" points="89.5,132.3086,79.5,136.3086,89.5,140.3086,85.5,136.3086" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="83.5" x2="290.5" y1="136.3086" y2="136.3086"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="189" x="95.5" y="131.5664">DNS update response (signed)</text><!--MD5=[1878df8bb6338e54fcd61a1faf1a5cc0] +@startuml
+
+title DNS Update Exchange (GSS-TSIG hook)
+
+participant "Kea D2 server" as Kea
+participant "DNS server" as DNS
+
+Kea -> DNS: DNS update request (signed)
+DNS -> Kea: DNS update response (signed)
+
+@enduml
+ +PlantUML version 1.2021.9(Sun Jul 25 12:13:56 CEST 2021) +(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/sphinx/uml/update.uml b/doc/sphinx/uml/update.uml new file mode 100644 index 0000000..9738f30 --- /dev/null +++ b/doc/sphinx/uml/update.uml @@ -0,0 +1,11 @@ +@startuml + +title DNS Update Exchange (GSS-TSIG hook) + +participant "Kea D2 server" as Kea +participant "DNS server" as DNS + +Kea -> DNS: DNS update request (signed) +DNS -> Kea: DNS update response (signed) + +@enduml |