2020-07-18 20:26:48 +02:00
|
|
|
@startuml
|
|
|
|
|
2020-08-21 15:19:53 +02:00
|
|
|
title requestLease4 algorithm (Kea 1.8.0)
|
2020-08-01 11:38:41 +02:00
|
|
|
|
2020-07-18 20:26:48 +02:00
|
|
|
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
|
2020-07-21 22:27:50 +02:00
|
|
|
else (no)
|
2020-07-18 20:26:48 +02:00
|
|
|
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)
|
2021-01-22 01:36:41 +02:00
|
|
|
while (iterate over pools and subnets)
|
2020-07-18 20:26:48 +02:00
|
|
|
:pick candidate address;
|
|
|
|
if (candidate is reserved for another client) then (no)
|
2020-07-21 22:27:50 +02:00
|
|
|
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)
|
2020-07-18 20:26:48 +02:00
|
|
|
endif
|
2020-07-21 22:27:50 +02:00
|
|
|
endif
|
|
|
|
else (yes)
|
2020-07-18 20:26:48 +02:00
|
|
|
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
|