diff options
Diffstat (limited to 'doc/sphinx/uml/requestLease4.uml')
-rw-r--r-- | doc/sphinx/uml/requestLease4.uml | 150 |
1 files changed, 150 insertions, 0 deletions
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 |