doc: add state diagrams
This commit is contained in:
parent
a455fac050
commit
1ae421e876
|
@ -524,6 +524,75 @@ msc {
|
||||||
}
|
}
|
||||||
....
|
....
|
||||||
|
|
||||||
|
=== State Diagrams
|
||||||
|
|
||||||
|
This section documents state diagrams for the digipeater and the clients.
|
||||||
|
They are only informational; different implementations are possible and allowed as long as the procedures defined by the <<_message_sequence_charts,message sequence charts>> are obeyed.
|
||||||
|
However, the state diagrams shown here reflect the reference implementation.
|
||||||
|
|
||||||
|
==== Connection State Diagram
|
||||||
|
|
||||||
|
[graphviz,format=svg,svg-type=interactive,scale=1.0]
|
||||||
|
.Connection state diagram
|
||||||
|
....
|
||||||
|
digraph connection {
|
||||||
|
uninitd [label="Uninitialized"];
|
||||||
|
connecting [label="Connecting"];
|
||||||
|
wait_client [label="Wait for\nclient"];
|
||||||
|
estab [label="Two-way communication\nestablished"];
|
||||||
|
closed [label="Closed"];
|
||||||
|
|
||||||
|
uninitd -> connecting [label="Connection request\nsent [client]"];
|
||||||
|
uninitd -> wait_client [label="Connection request\nreceived [digipeater]"];
|
||||||
|
|
||||||
|
connecting -> estab [label="Connection\nacknowledgement sent"];
|
||||||
|
wait_client -> estab [label="Connection\nacknowledged"];
|
||||||
|
|
||||||
|
connecting -> closed [label="Timeout"];
|
||||||
|
wait_client -> closed [label="Timeout"];
|
||||||
|
|
||||||
|
estab -> closed [label="Disconnect/Timeout"];
|
||||||
|
closed -> uninitd [label="State erased"];
|
||||||
|
}
|
||||||
|
....
|
||||||
|
|
||||||
|
==== Digipeater Connection Multiplexing
|
||||||
|
|
||||||
|
[graphviz,layout=neato,format=svg,svg-type=interactive,scale=1.0]
|
||||||
|
.Handling of multiple connections at the digipeater
|
||||||
|
....
|
||||||
|
digraph multiclient {
|
||||||
|
overlap=false;
|
||||||
|
|
||||||
|
idle [label="Idle"];
|
||||||
|
send_beacon [label="Send Beacon"];
|
||||||
|
accept_new [label="Check for\nnew clients"];
|
||||||
|
check_conn [label="Check connection timers"];
|
||||||
|
send_to_client [label="Send queued packets\nto client"];
|
||||||
|
receive_from_client [label="Receive packets\nfrom client"];
|
||||||
|
check_timeout [label="Check connection\ntimeout"];
|
||||||
|
reset_timeout [label="Reset connection\ntimeout"];
|
||||||
|
close_conn [label="Close\nconnection"];
|
||||||
|
|
||||||
|
idle -> send_beacon [label="Beacon timeout\nexpired"];
|
||||||
|
send_beacon -> accept_new;
|
||||||
|
accept_new -> idle;
|
||||||
|
|
||||||
|
idle -> check_conn [label="Any contact\ntimer expired"];
|
||||||
|
check_conn -> send_to_client [label="Contact timer\nexpired"];
|
||||||
|
send_to_client -> receive_from_client;
|
||||||
|
receive_from_client -> reset_timeout [label="Packets received"];
|
||||||
|
reset_timeout -> check_conn;
|
||||||
|
|
||||||
|
receive_from_client -> check_timeout [label="Nothing received"];
|
||||||
|
check_timeout -> check_conn [label="No timeout yet"];
|
||||||
|
check_timeout -> close_conn [label="Timed out"];
|
||||||
|
close_conn -> check_conn;
|
||||||
|
|
||||||
|
check_conn -> idle [label="All expired\nconnections handled"];
|
||||||
|
}
|
||||||
|
....
|
||||||
|
|
||||||
== Higher Layer Protocols
|
== Higher Layer Protocols
|
||||||
|
|
||||||
[appendix]
|
[appendix]
|
||||||
|
|
Loading…
Reference in a new issue