summaryrefslogtreecommitdiffstats
path: root/doc/sphinx/uml/select4.uml
diff options
context:
space:
mode:
Diffstat (limited to 'doc/sphinx/uml/select4.uml')
-rw-r--r--doc/sphinx/uml/select4.uml85
1 files changed, 85 insertions, 0 deletions
diff --git a/doc/sphinx/uml/select4.uml b/doc/sphinx/uml/select4.uml
new file mode 100644
index 0000000..ed8b65c
--- /dev/null
+++ b/doc/sphinx/uml/select4.uml
@@ -0,0 +1,85 @@
+@startuml
+
+title DHCPv4 subnet selection (Kea 1.8.0)
+
+agent "Entry point" as entry
+
+agent "Try RAI link select" as rai_link_select
+
+agent "Try subnet selection option" as subnet_select
+
+rectangle "Relayed" as relayed {
+ agent "Relay address matches subnet" as relay_subnet
+ agent "Relay address matches shared network" as relay_network
+ agent "Check client class" as relay_class
+}
+
+rectangle "Set address for lookup" as set_address {
+ agent "Set relay address" as relay_address
+ agent "Set client address" as client_address
+ agent "Set source address" as source_address
+}
+
+rectangle "Try incoming interface" as interface {
+ agent "Interface matches subnet" as interface_subnet
+ agent "Interface matches shared network" as interface_network
+ agent "Check client class" as interface_class
+ agent "Set interface address" as interface_address
+}
+
+rectangle "Try address" as address {
+ agent "Check subnet prefix" as inRange
+ agent "Check client class" as address_class
+}
+
+agent "Found a subnet" as found
+
+agent "Found no subnet" as not_found
+
+agent "Callout subnet4_select" as subnet4_select
+
+agent "Return a subnet" as success
+
+agent "Return no subnet" as no_subnet
+
+agent "Drop query" as drop
+
+entry --> rai_link_select
+rai_link_select --> subnet_select
+subnet_select --> relayed : relayed
+subnet_select --> set_address : not relayed
+relayed --> relay_subnet
+relay_subnet --> relay_network : no match
+relay_subnet --> relay_class : match
+relay_network --> set_address : no match
+relay_network --> relay_class : match
+relay_class ---> found : compatible
+relay_class --> set_address : not compatible
+set_address --> relay_address : try the relay address
+relay_address -r-> client_address : has no relay address
+client_address -r-> source_address : has no client address
+source_address --> interface_subnet : no suitable address
+relay_address --> inRange : has a relay address
+client_address --> inRange : has a client address
+source_address --> inRange : has source address and use unicast
+interface_subnet ---> not_found : no interface
+interface_subnet --> interface_class : match
+interface_subnet --> interface_network : no match
+interface_network --> interface_class : march
+interface_network ---> not_found : no match
+interface_class ---> found : compatible
+interface_class ---> interface_address : not compatible
+interface_address --> inRange : has an interface address
+interface_address ---> not_found : no interface address
+inRange ---> address_class : match
+inRange ---> not_found : no match
+address_class ---> found : compatible
+address_class ---> not_found : not compatible
+found --> subnet4_select
+not_found --> subnet4_select
+found -[hidden]> not_found
+subnet4_select --> success : CONTINUE and subnet set
+subnet4_select --> no_subnet : SKIP or subnet not set
+subnet4_select --> drop : DROP
+
+@enduml