diff options
Diffstat (limited to 'doc/sphinx/uml/select4.uml')
-rw-r--r-- | doc/sphinx/uml/select4.uml | 85 |
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 |