summaryrefslogtreecommitdiffstats
path: root/doc/sphinx/uml/currentHost4.uml
diff options
context:
space:
mode:
Diffstat (limited to 'doc/sphinx/uml/currentHost4.uml')
-rw-r--r--doc/sphinx/uml/currentHost4.uml83
1 files changed, 83 insertions, 0 deletions
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