2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-08-22 18:08:16 +00:00
kea/doc/sphinx/uml/request4-lease.uml
2021-01-25 13:52:09 +02:00

119 lines
3.8 KiB
Plaintext

@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