mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-08-22 18:08:16 +00:00
119 lines
3.8 KiB
Plaintext
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
|