[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dccp] event processing state machine
I also wrote a little C++ program that turns the event processing algorithm
into a state machine. Here is the complete output of the state machine.
Individual transitions look like:
TIMEWAIT/s + Close[*,*] --> ~ Reset
^^^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^
| | |
| | actions: drop input packet, send Reset
| |
| received packet: Close, arbitrary seq + ack numbers
|
input state: TIMEWAIT on "s"erver
Seq and ack numbers fit into five categories:
bad- Before low edge of window
old In window, not new
new In window, new
bad+ After high edge of window
* Action is independent of seq/ack number
They are listed like Packet[seqno,ackno].
There are six types of action:
opt Process options
addr Switch socket address (Move only)
data Accept any data on packet
~ Drop input packet w/o processing options or accepting data
OPEN/s, PARTOPEN/c, ... switch socket state
Reset, Close, Sync, Ack, ... send packet
Eddie
# CLIENT STATES
# -------------
CLOSED/c + Request[*] --> ~ Reset
CLOSED/c + Response[*,*] --> ~ Reset
CLOSED/c + Data[*] --> ~ Reset
CLOSED/c + Ack[*,*] --> ~ Reset
CLOSED/c + DataAck[*,*] --> ~ Reset
CLOSED/c + CloseReq[*,*] --> ~ Reset
CLOSED/c + Close[*,*] --> ~ Reset
CLOSED/c + Reset[*,*] --> ~
CLOSED/c + Move[*,*] --> ~
CLOSED/c + Sync[*,*] --> ~ Reset
CLOSED/c + SyncReply[*,*] --> ~ Reset
REQUEST/c + Request[*] --> ~ Reset
REQUEST/c + Response[*,bad-] --> ~ Reset
REQUEST/c + Response[*,old] --> opt data PARTOPEN/c Ack
REQUEST/c + Response[*,new] --> opt data PARTOPEN/c Ack
REQUEST/c + Response[*,bad+] --> ~ Reset
REQUEST/c + Data[*] --> ~ Reset
REQUEST/c + Ack[*,*] --> ~ Reset
REQUEST/c + DataAck[*,*] --> ~ Reset
REQUEST/c + CloseReq[*,*] --> ~ Reset
REQUEST/c + Close[*,*] --> ~ Reset
REQUEST/c + Reset[*,bad-] --> ~
REQUEST/c + Reset[*,old] --> ~ TIMEWAIT/c
REQUEST/c + Reset[*,new] --> ~ TIMEWAIT/c
REQUEST/c + Reset[*,bad+] --> ~
REQUEST/c + Move[*,*] --> ~
REQUEST/c + Sync[*,*] --> ~ Reset
REQUEST/c + SyncReply[*,*] --> ~ Reset
PARTOPEN/c + Request[bad-] --> ~ Sync
PARTOPEN/c + Request[old] --> ~ CLOSED/c Reset
PARTOPEN/c + Request[new] --> ~ CLOSED/c Reset
PARTOPEN/c + Request[bad+] --> ~ Sync
PARTOPEN/c + Response[*,bad-] --> ~ Sync
PARTOPEN/c + Response[bad-,old] --> ~ Sync
PARTOPEN/c + Response[old,old] --> opt data Ack
PARTOPEN/c + Response[new,old] --> opt data Ack
PARTOPEN/c + Response[bad+,old] --> ~ Sync
PARTOPEN/c + Response[bad-,new] --> ~ Sync
PARTOPEN/c + Response[old,new] --> opt data Ack
PARTOPEN/c + Response[new,new] --> opt data Ack
PARTOPEN/c + Response[bad+,new] --> ~ Sync
PARTOPEN/c + Response[*,bad+] --> ~ Sync
PARTOPEN/c + Data[bad-] --> ~ Sync
PARTOPEN/c + Data[old] --> opt data OPEN/c
PARTOPEN/c + Data[new] --> opt data OPEN/c
PARTOPEN/c + Data[bad+] --> ~ Sync
PARTOPEN/c + Ack[*,bad-] --> ~ Sync
PARTOPEN/c + Ack[bad-,old] --> ~ Sync
PARTOPEN/c + Ack[old,old] --> opt OPEN/c
PARTOPEN/c + Ack[new,old] --> opt OPEN/c
PARTOPEN/c + Ack[bad+,old] --> ~ Sync
PARTOPEN/c + Ack[bad-,new] --> ~ Sync
PARTOPEN/c + Ack[old,new] --> opt OPEN/c
PARTOPEN/c + Ack[new,new] --> opt OPEN/c
PARTOPEN/c + Ack[bad+,new] --> ~ Sync
PARTOPEN/c + Ack[*,bad+] --> ~ Sync
PARTOPEN/c + DataAck[*,bad-] --> ~ Sync
PARTOPEN/c + DataAck[bad-,old] --> ~ Sync
PARTOPEN/c + DataAck[old,old] --> opt data OPEN/c
PARTOPEN/c + DataAck[new,old] --> opt data OPEN/c
PARTOPEN/c + DataAck[bad+,old] --> ~ Sync
PARTOPEN/c + DataAck[bad-,new] --> ~ Sync
PARTOPEN/c + DataAck[old,new] --> opt data OPEN/c
PARTOPEN/c + DataAck[new,new] --> opt data OPEN/c
PARTOPEN/c + DataAck[bad+,new] --> ~ Sync
PARTOPEN/c + DataAck[*,bad+] --> ~ Sync
PARTOPEN/c + CloseReq[*,bad-] --> ~ Sync
PARTOPEN/c + CloseReq[bad-,old] --> ~ Sync
PARTOPEN/c + CloseReq[old,old] --> opt CLOSING/c Close
PARTOPEN/c + CloseReq[new,old] --> opt CLOSING/c Close
PARTOPEN/c + CloseReq[bad+,old] --> ~ Sync
PARTOPEN/c + CloseReq[bad-,new] --> ~ Sync
PARTOPEN/c + CloseReq[old,new] --> opt CLOSING/c Close
PARTOPEN/c + CloseReq[new,new] --> opt CLOSING/c Close
PARTOPEN/c + CloseReq[bad+,new] --> ~ Sync
PARTOPEN/c + CloseReq[*,bad+] --> ~ Sync
PARTOPEN/c + Close[*,bad-] --> ~ Sync
PARTOPEN/c + Close[bad-,old] --> ~ Sync
PARTOPEN/c + Close[old,old] --> opt CLOSED/c Reset
PARTOPEN/c + Close[new,old] --> opt CLOSED/c Reset
PARTOPEN/c + Close[bad+,old] --> ~ Sync
PARTOPEN/c + Close[bad-,new] --> ~ Sync
PARTOPEN/c + Close[old,new] --> opt CLOSED/c Reset
PARTOPEN/c + Close[new,new] --> opt CLOSED/c Reset
PARTOPEN/c + Close[bad+,new] --> ~ Sync
PARTOPEN/c + Close[*,bad+] --> ~ Sync
PARTOPEN/c + Reset[*,bad-] --> ~
PARTOPEN/c + Reset[*,old] --> ~
PARTOPEN/c + Reset[bad-,new] --> ~
PARTOPEN/c + Reset[old,new] --> ~ TIMEWAIT/c
PARTOPEN/c + Reset[new,new] --> ~ TIMEWAIT/c
PARTOPEN/c + Reset[bad+,new] --> ~ TIMEWAIT/c
PARTOPEN/c + Reset[*,bad+] --> ~
PARTOPEN/c + Move[bad-,bad-] --> ~
PARTOPEN/c + Move[old,bad-] --> opt addr Sync
PARTOPEN/c + Move[new,bad-] --> opt addr Sync
PARTOPEN/c + Move[bad+,bad-] --> opt addr Sync
PARTOPEN/c + Move[bad-,old] --> ~
PARTOPEN/c + Move[old,old] --> opt addr Sync
PARTOPEN/c + Move[new,old] --> opt addr Sync
PARTOPEN/c + Move[bad+,old] --> opt addr Sync
PARTOPEN/c + Move[bad-,new] --> ~
PARTOPEN/c + Move[old,new] --> opt addr Sync
PARTOPEN/c + Move[new,new] --> opt addr Sync
PARTOPEN/c + Move[bad+,new] --> opt addr Sync
PARTOPEN/c + Move[*,bad+] --> ~
PARTOPEN/c + Sync[*,bad-] --> ~
PARTOPEN/c + Sync[bad-,old] --> ~
PARTOPEN/c + Sync[old,old] --> opt OPEN/c SyncReply
PARTOPEN/c + Sync[new,old] --> opt OPEN/c SyncReply
PARTOPEN/c + Sync[bad+,old] --> opt OPEN/c SyncReply
PARTOPEN/c + Sync[bad-,new] --> ~
PARTOPEN/c + Sync[old,new] --> opt OPEN/c SyncReply
PARTOPEN/c + Sync[new,new] --> opt OPEN/c SyncReply
PARTOPEN/c + Sync[bad+,new] --> opt OPEN/c SyncReply
PARTOPEN/c + Sync[*,bad+] --> ~
PARTOPEN/c + SyncReply[*,bad-] --> ~
PARTOPEN/c + SyncReply[bad-,old] --> ~
PARTOPEN/c + SyncReply[old,old] --> opt OPEN/c
PARTOPEN/c + SyncReply[new,old] --> opt OPEN/c
PARTOPEN/c + SyncReply[bad+,old] --> opt OPEN/c
PARTOPEN/c + SyncReply[bad-,new] --> ~
PARTOPEN/c + SyncReply[old,new] --> opt OPEN/c
PARTOPEN/c + SyncReply[new,new] --> opt OPEN/c
PARTOPEN/c + SyncReply[bad+,new] --> opt OPEN/c
PARTOPEN/c + SyncReply[*,bad+] --> ~
OPEN/c + Request[bad-] --> ~ Sync
OPEN/c + Request[old] --> ~ CLOSED/c Reset
OPEN/c + Request[new] --> ~ CLOSED/c Reset
OPEN/c + Request[bad+] --> ~ Sync
OPEN/c + Response[*,bad-] --> ~ Sync
OPEN/c + Response[bad-,old] --> ~ Sync
OPEN/c + Response[old,old] --> opt data
OPEN/c + Response[new,old] --> opt data
OPEN/c + Response[bad+,old] --> ~ Sync
OPEN/c + Response[bad-,new] --> ~ Sync
OPEN/c + Response[old,new] --> opt data
OPEN/c + Response[new,new] --> opt data
OPEN/c + Response[bad+,new] --> ~ Sync
OPEN/c + Response[*,bad+] --> ~ Sync
OPEN/c + Data[bad-] --> ~ Sync
OPEN/c + Data[old] --> opt data
OPEN/c + Data[new] --> opt data
OPEN/c + Data[bad+] --> ~ Sync
OPEN/c + Ack[*,bad-] --> ~ Sync
OPEN/c + Ack[bad-,old] --> ~ Sync
OPEN/c + Ack[old,old] --> opt
OPEN/c + Ack[new,old] --> opt
OPEN/c + Ack[bad+,old] --> ~ Sync
OPEN/c + Ack[bad-,new] --> ~ Sync
OPEN/c + Ack[old,new] --> opt
OPEN/c + Ack[new,new] --> opt
OPEN/c + Ack[bad+,new] --> ~ Sync
OPEN/c + Ack[*,bad+] --> ~ Sync
OPEN/c + DataAck[*,bad-] --> ~ Sync
OPEN/c + DataAck[bad-,old] --> ~ Sync
OPEN/c + DataAck[old,old] --> opt data
OPEN/c + DataAck[new,old] --> opt data
OPEN/c + DataAck[bad+,old] --> ~ Sync
OPEN/c + DataAck[bad-,new] --> ~ Sync
OPEN/c + DataAck[old,new] --> opt data
OPEN/c + DataAck[new,new] --> opt data
OPEN/c + DataAck[bad+,new] --> ~ Sync
OPEN/c + DataAck[*,bad+] --> ~ Sync
OPEN/c + CloseReq[*,bad-] --> ~ Sync
OPEN/c + CloseReq[bad-,old] --> ~ Sync
OPEN/c + CloseReq[old,old] --> opt CLOSING/c Close
OPEN/c + CloseReq[new,old] --> opt CLOSING/c Close
OPEN/c + CloseReq[bad+,old] --> ~ Sync
OPEN/c + CloseReq[bad-,new] --> ~ Sync
OPEN/c + CloseReq[old,new] --> opt CLOSING/c Close
OPEN/c + CloseReq[new,new] --> opt CLOSING/c Close
OPEN/c + CloseReq[bad+,new] --> ~ Sync
OPEN/c + CloseReq[*,bad+] --> ~ Sync
OPEN/c + Close[*,bad-] --> ~ Sync
OPEN/c + Close[bad-,old] --> ~ Sync
OPEN/c + Close[old,old] --> opt CLOSED/c Reset
OPEN/c + Close[new,old] --> opt CLOSED/c Reset
OPEN/c + Close[bad+,old] --> ~ Sync
OPEN/c + Close[bad-,new] --> ~ Sync
OPEN/c + Close[old,new] --> opt CLOSED/c Reset
OPEN/c + Close[new,new] --> opt CLOSED/c Reset
OPEN/c + Close[bad+,new] --> ~ Sync
OPEN/c + Close[*,bad+] --> ~ Sync
OPEN/c + Reset[*,bad-] --> ~
OPEN/c + Reset[*,old] --> ~
OPEN/c + Reset[bad-,new] --> ~
OPEN/c + Reset[old,new] --> ~ TIMEWAIT/c
OPEN/c + Reset[new,new] --> ~ TIMEWAIT/c
OPEN/c + Reset[bad+,new] --> ~ TIMEWAIT/c
OPEN/c + Reset[*,bad+] --> ~
OPEN/c + Move[bad-,bad-] --> ~
OPEN/c + Move[old,bad-] --> opt addr Sync
OPEN/c + Move[new,bad-] --> opt addr Sync
OPEN/c + Move[bad+,bad-] --> opt addr Sync
OPEN/c + Move[bad-,old] --> ~
OPEN/c + Move[old,old] --> opt addr Sync
OPEN/c + Move[new,old] --> opt addr Sync
OPEN/c + Move[bad+,old] --> opt addr Sync
OPEN/c + Move[bad-,new] --> ~
OPEN/c + Move[old,new] --> opt addr Sync
OPEN/c + Move[new,new] --> opt addr Sync
OPEN/c + Move[bad+,new] --> opt addr Sync
OPEN/c + Move[*,bad+] --> ~
OPEN/c + Sync[*,bad-] --> ~
OPEN/c + Sync[bad-,old] --> ~
OPEN/c + Sync[old,old] --> opt SyncReply
OPEN/c + Sync[new,old] --> opt SyncReply
OPEN/c + Sync[bad+,old] --> opt SyncReply
OPEN/c + Sync[bad-,new] --> ~
OPEN/c + Sync[old,new] --> opt SyncReply
OPEN/c + Sync[new,new] --> opt SyncReply
OPEN/c + Sync[bad+,new] --> opt SyncReply
OPEN/c + Sync[*,bad+] --> ~
OPEN/c + SyncReply[*,bad-] --> ~
OPEN/c + SyncReply[bad-,old] --> ~
OPEN/c + SyncReply[old,old] --> opt
OPEN/c + SyncReply[new,old] --> opt
OPEN/c + SyncReply[bad+,old] --> opt
OPEN/c + SyncReply[bad-,new] --> ~
OPEN/c + SyncReply[old,new] --> opt
OPEN/c + SyncReply[new,new] --> opt
OPEN/c + SyncReply[bad+,new] --> opt
OPEN/c + SyncReply[*,bad+] --> ~
CLOSEREQ/c + Request[bad-] --> ~ Sync
CLOSEREQ/c + Request[old] --> ~ CLOSED/c Reset
CLOSEREQ/c + Request[new] --> ~ CLOSED/c Reset
CLOSEREQ/c + Request[bad+] --> ~ Sync
CLOSEREQ/c + Response[*,bad-] --> ~ Sync
CLOSEREQ/c + Response[bad-,old] --> ~ Sync
CLOSEREQ/c + Response[old,old] --> opt data
CLOSEREQ/c + Response[new,old] --> opt data
CLOSEREQ/c + Response[bad+,old] --> ~ Sync
CLOSEREQ/c + Response[bad-,new] --> ~ Sync
CLOSEREQ/c + Response[old,new] --> opt data
CLOSEREQ/c + Response[new,new] --> opt data
CLOSEREQ/c + Response[bad+,new] --> ~ Sync
CLOSEREQ/c + Response[*,bad+] --> ~ Sync
CLOSEREQ/c + Data[bad-] --> ~ Sync
CLOSEREQ/c + Data[old] --> opt data
CLOSEREQ/c + Data[new] --> opt data
CLOSEREQ/c + Data[bad+] --> ~ Sync
CLOSEREQ/c + Ack[*,bad-] --> ~ Sync
CLOSEREQ/c + Ack[bad-,old] --> ~ Sync
CLOSEREQ/c + Ack[old,old] --> opt
CLOSEREQ/c + Ack[new,old] --> opt
CLOSEREQ/c + Ack[bad+,old] --> ~ Sync
CLOSEREQ/c + Ack[bad-,new] --> ~ Sync
CLOSEREQ/c + Ack[old,new] --> opt
CLOSEREQ/c + Ack[new,new] --> opt
CLOSEREQ/c + Ack[bad+,new] --> ~ Sync
CLOSEREQ/c + Ack[*,bad+] --> ~ Sync
CLOSEREQ/c + DataAck[*,bad-] --> ~ Sync
CLOSEREQ/c + DataAck[bad-,old] --> ~ Sync
CLOSEREQ/c + DataAck[old,old] --> opt data
CLOSEREQ/c + DataAck[new,old] --> opt data
CLOSEREQ/c + DataAck[bad+,old] --> ~ Sync
CLOSEREQ/c + DataAck[bad-,new] --> ~ Sync
CLOSEREQ/c + DataAck[old,new] --> opt data
CLOSEREQ/c + DataAck[new,new] --> opt data
CLOSEREQ/c + DataAck[bad+,new] --> ~ Sync
CLOSEREQ/c + DataAck[*,bad+] --> ~ Sync
CLOSEREQ/c + CloseReq[*,bad-] --> ~ Sync
CLOSEREQ/c + CloseReq[bad-,old] --> ~ Sync
CLOSEREQ/c + CloseReq[old,old] --> opt
CLOSEREQ/c + CloseReq[new,old] --> opt
CLOSEREQ/c + CloseReq[bad+,old] --> ~ Sync
CLOSEREQ/c + CloseReq[bad-,new] --> ~ Sync
CLOSEREQ/c + CloseReq[old,new] --> opt
CLOSEREQ/c + CloseReq[new,new] --> opt
CLOSEREQ/c + CloseReq[bad+,new] --> ~ Sync
CLOSEREQ/c + CloseReq[*,bad+] --> ~ Sync
CLOSEREQ/c + Close[*,bad-] --> ~ Sync
CLOSEREQ/c + Close[bad-,old] --> ~ Sync
CLOSEREQ/c + Close[old,old] --> opt CLOSED/c Reset
CLOSEREQ/c + Close[new,old] --> opt CLOSED/c Reset
CLOSEREQ/c + Close[bad+,old] --> ~ Sync
CLOSEREQ/c + Close[bad-,new] --> ~ Sync
CLOSEREQ/c + Close[old,new] --> opt CLOSED/c Reset
CLOSEREQ/c + Close[new,new] --> opt CLOSED/c Reset
CLOSEREQ/c + Close[bad+,new] --> ~ Sync
CLOSEREQ/c + Close[*,bad+] --> ~ Sync
CLOSEREQ/c + Reset[*,bad-] --> ~
CLOSEREQ/c + Reset[*,old] --> ~
CLOSEREQ/c + Reset[bad-,new] --> ~
CLOSEREQ/c + Reset[old,new] --> ~ TIMEWAIT/c
CLOSEREQ/c + Reset[new,new] --> ~ TIMEWAIT/c
CLOSEREQ/c + Reset[bad+,new] --> ~ TIMEWAIT/c
CLOSEREQ/c + Reset[*,bad+] --> ~
CLOSEREQ/c + Move[bad-,bad-] --> ~
CLOSEREQ/c + Move[old,bad-] --> opt addr Sync
CLOSEREQ/c + Move[new,bad-] --> opt addr Sync
CLOSEREQ/c + Move[bad+,bad-] --> opt addr Sync
CLOSEREQ/c + Move[bad-,old] --> ~
CLOSEREQ/c + Move[old,old] --> opt addr Sync
CLOSEREQ/c + Move[new,old] --> opt addr Sync
CLOSEREQ/c + Move[bad+,old] --> opt addr Sync
CLOSEREQ/c + Move[bad-,new] --> ~
CLOSEREQ/c + Move[old,new] --> opt addr Sync
CLOSEREQ/c + Move[new,new] --> opt addr Sync
CLOSEREQ/c + Move[bad+,new] --> opt addr Sync
CLOSEREQ/c + Move[*,bad+] --> ~
CLOSEREQ/c + Sync[*,bad-] --> ~
CLOSEREQ/c + Sync[bad-,old] --> ~
CLOSEREQ/c + Sync[old,old] --> opt SyncReply
CLOSEREQ/c + Sync[new,old] --> opt SyncReply
CLOSEREQ/c + Sync[bad+,old] --> opt SyncReply
CLOSEREQ/c + Sync[bad-,new] --> ~
CLOSEREQ/c + Sync[old,new] --> opt SyncReply
CLOSEREQ/c + Sync[new,new] --> opt SyncReply
CLOSEREQ/c + Sync[bad+,new] --> opt SyncReply
CLOSEREQ/c + Sync[*,bad+] --> ~
CLOSEREQ/c + SyncReply[*,bad-] --> ~
CLOSEREQ/c + SyncReply[bad-,old] --> ~
CLOSEREQ/c + SyncReply[old,old] --> opt
CLOSEREQ/c + SyncReply[new,old] --> opt
CLOSEREQ/c + SyncReply[bad+,old] --> opt
CLOSEREQ/c + SyncReply[bad-,new] --> ~
CLOSEREQ/c + SyncReply[old,new] --> opt
CLOSEREQ/c + SyncReply[new,new] --> opt
CLOSEREQ/c + SyncReply[bad+,new] --> opt
CLOSEREQ/c + SyncReply[*,bad+] --> ~
CLOSING/c + Request[bad-] --> ~ Sync
CLOSING/c + Request[old] --> ~ CLOSED/c Reset
CLOSING/c + Request[new] --> ~ CLOSED/c Reset
CLOSING/c + Request[bad+] --> ~ Sync
CLOSING/c + Response[*,bad-] --> ~ Sync
CLOSING/c + Response[bad-,old] --> ~ Sync
CLOSING/c + Response[old,old] --> opt data
CLOSING/c + Response[new,old] --> opt data
CLOSING/c + Response[bad+,old] --> ~ Sync
CLOSING/c + Response[bad-,new] --> ~ Sync
CLOSING/c + Response[old,new] --> opt data
CLOSING/c + Response[new,new] --> opt data
CLOSING/c + Response[bad+,new] --> ~ Sync
CLOSING/c + Response[*,bad+] --> ~ Sync
CLOSING/c + Data[bad-] --> ~ Sync
CLOSING/c + Data[old] --> opt data
CLOSING/c + Data[new] --> opt data
CLOSING/c + Data[bad+] --> ~ Sync
CLOSING/c + Ack[*,bad-] --> ~ Sync
CLOSING/c + Ack[bad-,old] --> ~ Sync
CLOSING/c + Ack[old,old] --> opt
CLOSING/c + Ack[new,old] --> opt
CLOSING/c + Ack[bad+,old] --> ~ Sync
CLOSING/c + Ack[bad-,new] --> ~ Sync
CLOSING/c + Ack[old,new] --> opt
CLOSING/c + Ack[new,new] --> opt
CLOSING/c + Ack[bad+,new] --> ~ Sync
CLOSING/c + Ack[*,bad+] --> ~ Sync
CLOSING/c + DataAck[*,bad-] --> ~ Sync
CLOSING/c + DataAck[bad-,old] --> ~ Sync
CLOSING/c + DataAck[old,old] --> opt data
CLOSING/c + DataAck[new,old] --> opt data
CLOSING/c + DataAck[bad+,old] --> ~ Sync
CLOSING/c + DataAck[bad-,new] --> ~ Sync
CLOSING/c + DataAck[old,new] --> opt data
CLOSING/c + DataAck[new,new] --> opt data
CLOSING/c + DataAck[bad+,new] --> ~ Sync
CLOSING/c + DataAck[*,bad+] --> ~ Sync
CLOSING/c + CloseReq[*,bad-] --> ~ Sync
CLOSING/c + CloseReq[bad-,old] --> ~ Sync
CLOSING/c + CloseReq[old,old] --> opt
CLOSING/c + CloseReq[new,old] --> opt
CLOSING/c + CloseReq[bad+,old] --> ~ Sync
CLOSING/c + CloseReq[bad-,new] --> ~ Sync
CLOSING/c + CloseReq[old,new] --> opt
CLOSING/c + CloseReq[new,new] --> opt
CLOSING/c + CloseReq[bad+,new] --> ~ Sync
CLOSING/c + CloseReq[*,bad+] --> ~ Sync
CLOSING/c + Close[*,bad-] --> ~ Sync
CLOSING/c + Close[bad-,old] --> ~ Sync
CLOSING/c + Close[old,old] --> opt CLOSED/c Reset
CLOSING/c + Close[new,old] --> opt CLOSED/c Reset
CLOSING/c + Close[bad+,old] --> ~ Sync
CLOSING/c + Close[bad-,new] --> ~ Sync
CLOSING/c + Close[old,new] --> opt CLOSED/c Reset
CLOSING/c + Close[new,new] --> opt CLOSED/c Reset
CLOSING/c + Close[bad+,new] --> ~ Sync
CLOSING/c + Close[*,bad+] --> ~ Sync
CLOSING/c + Reset[*,bad-] --> ~
CLOSING/c + Reset[*,old] --> ~
CLOSING/c + Reset[bad-,new] --> ~
CLOSING/c + Reset[old,new] --> ~ TIMEWAIT/c
CLOSING/c + Reset[new,new] --> ~ TIMEWAIT/c
CLOSING/c + Reset[bad+,new] --> ~ TIMEWAIT/c
CLOSING/c + Reset[*,bad+] --> ~
CLOSING/c + Move[bad-,bad-] --> ~
CLOSING/c + Move[old,bad-] --> opt addr Sync
CLOSING/c + Move[new,bad-] --> opt addr Sync
CLOSING/c + Move[bad+,bad-] --> opt addr Sync
CLOSING/c + Move[bad-,old] --> ~
CLOSING/c + Move[old,old] --> opt addr Sync
CLOSING/c + Move[new,old] --> opt addr Sync
CLOSING/c + Move[bad+,old] --> opt addr Sync
CLOSING/c + Move[bad-,new] --> ~
CLOSING/c + Move[old,new] --> opt addr Sync
CLOSING/c + Move[new,new] --> opt addr Sync
CLOSING/c + Move[bad+,new] --> opt addr Sync
CLOSING/c + Move[*,bad+] --> ~
CLOSING/c + Sync[*,bad-] --> ~
CLOSING/c + Sync[bad-,old] --> ~
CLOSING/c + Sync[old,old] --> opt SyncReply
CLOSING/c + Sync[new,old] --> opt SyncReply
CLOSING/c + Sync[bad+,old] --> opt SyncReply
CLOSING/c + Sync[bad-,new] --> ~
CLOSING/c + Sync[old,new] --> opt SyncReply
CLOSING/c + Sync[new,new] --> opt SyncReply
CLOSING/c + Sync[bad+,new] --> opt SyncReply
CLOSING/c + Sync[*,bad+] --> ~
CLOSING/c + SyncReply[*,bad-] --> ~
CLOSING/c + SyncReply[bad-,old] --> ~
CLOSING/c + SyncReply[old,old] --> opt
CLOSING/c + SyncReply[new,old] --> opt
CLOSING/c + SyncReply[bad+,old] --> opt
CLOSING/c + SyncReply[bad-,new] --> ~
CLOSING/c + SyncReply[old,new] --> opt
CLOSING/c + SyncReply[new,new] --> opt
CLOSING/c + SyncReply[bad+,new] --> opt
CLOSING/c + SyncReply[*,bad+] --> ~
TIMEWAIT/c + Request[*] --> ~ Reset
TIMEWAIT/c + Response[*,*] --> ~ Reset
TIMEWAIT/c + Data[*] --> ~ Reset
TIMEWAIT/c + Ack[*,*] --> ~ Reset
TIMEWAIT/c + DataAck[*,*] --> ~ Reset
TIMEWAIT/c + CloseReq[*,*] --> ~ Reset
TIMEWAIT/c + Close[*,*] --> ~ Reset
TIMEWAIT/c + Reset[*,*] --> ~
TIMEWAIT/c + Move[*,*] --> ~
TIMEWAIT/c + Sync[*,*] --> ~ Reset
TIMEWAIT/c + SyncReply[*,*] --> ~ Reset
# SERVER STATES
# -------------
CLOSED/s + Request[*] --> ~ Reset
CLOSED/s + Response[*,*] --> ~ Reset
CLOSED/s + Data[*] --> ~ Reset
CLOSED/s + Ack[*,*] --> ~ Reset
CLOSED/s + DataAck[*,*] --> ~ Reset
CLOSED/s + CloseReq[*,*] --> ~ Reset
CLOSED/s + Close[*,*] --> ~ Reset
CLOSED/s + Reset[*,*] --> ~
CLOSED/s + Move[*,*] --> ~
CLOSED/s + Sync[*,*] --> ~ Reset
CLOSED/s + SyncReply[*,*] --> ~ Reset
LISTEN/s + Request[*] --> opt data RESPOND/s Response
LISTEN/s + Response[*,*] --> ~ Reset
LISTEN/s + Data[*] --> ~ Reset
LISTEN/s + Ack[*,*] --> ~ Reset
LISTEN/s + DataAck[*,*] --> ~ Reset
LISTEN/s + CloseReq[*,*] --> ~ Reset
LISTEN/s + Close[*,*] --> ~ Reset
LISTEN/s + Reset[*,*] --> ~
LISTEN/s + Move[*,*] --> ~
LISTEN/s + Sync[*,*] --> ~ Reset
LISTEN/s + SyncReply[*,*] --> ~ Reset
RESPOND/s + Request[bad-] --> ~ Sync
RESPOND/s + Request[old] --> opt data Response
RESPOND/s + Request[new] --> opt data Response
RESPOND/s + Request[bad+] --> ~ Sync
RESPOND/s + Response[*,bad-] --> ~ Sync
RESPOND/s + Response[bad-,old] --> ~ Sync
RESPOND/s + Response[old,old] --> ~ CLOSED/s Reset
RESPOND/s + Response[new,old] --> ~ CLOSED/s Reset
RESPOND/s + Response[bad+,old] --> ~ Sync
RESPOND/s + Response[bad-,new] --> ~ Sync
RESPOND/s + Response[old,new] --> ~ CLOSED/s Reset
RESPOND/s + Response[new,new] --> ~ CLOSED/s Reset
RESPOND/s + Response[bad+,new] --> ~ Sync
RESPOND/s + Response[*,bad+] --> ~ Sync
RESPOND/s + Data[bad-] --> ~ Sync
RESPOND/s + Data[old] --> ~
RESPOND/s + Data[new] --> ~
RESPOND/s + Data[bad+] --> ~ Sync
RESPOND/s + Ack[*,bad-] --> ~ Sync
RESPOND/s + Ack[bad-,old] --> ~ Sync
RESPOND/s + Ack[old,old] --> opt OPEN/s
RESPOND/s + Ack[new,old] --> opt OPEN/s
RESPOND/s + Ack[bad+,old] --> ~ Sync
RESPOND/s + Ack[bad-,new] --> ~ Sync
RESPOND/s + Ack[old,new] --> opt OPEN/s
RESPOND/s + Ack[new,new] --> opt OPEN/s
RESPOND/s + Ack[bad+,new] --> ~ Sync
RESPOND/s + Ack[*,bad+] --> ~ Sync
RESPOND/s + DataAck[*,bad-] --> ~ Sync
RESPOND/s + DataAck[bad-,old] --> ~ Sync
RESPOND/s + DataAck[old,old] --> opt data OPEN/s
RESPOND/s + DataAck[new,old] --> opt data OPEN/s
RESPOND/s + DataAck[bad+,old] --> ~ Sync
RESPOND/s + DataAck[bad-,new] --> ~ Sync
RESPOND/s + DataAck[old,new] --> opt data OPEN/s
RESPOND/s + DataAck[new,new] --> opt data OPEN/s
RESPOND/s + DataAck[bad+,new] --> ~ Sync
RESPOND/s + DataAck[*,bad+] --> ~ Sync
RESPOND/s + CloseReq[*,bad-] --> ~ Sync
RESPOND/s + CloseReq[bad-,old] --> ~ Sync
RESPOND/s + CloseReq[old,old] --> ~ CLOSED/s Reset
RESPOND/s + CloseReq[new,old] --> ~ CLOSED/s Reset
RESPOND/s + CloseReq[bad+,old] --> ~ Sync
RESPOND/s + CloseReq[bad-,new] --> ~ Sync
RESPOND/s + CloseReq[old,new] --> ~ CLOSED/s Reset
RESPOND/s + CloseReq[new,new] --> ~ CLOSED/s Reset
RESPOND/s + CloseReq[bad+,new] --> ~ Sync
RESPOND/s + CloseReq[*,bad+] --> ~ Sync
RESPOND/s + Close[*,bad-] --> ~ Sync
RESPOND/s + Close[bad-,old] --> ~ Sync
RESPOND/s + Close[old,old] --> opt CLOSED/s Reset
RESPOND/s + Close[new,old] --> opt CLOSED/s Reset
RESPOND/s + Close[bad+,old] --> ~ Sync
RESPOND/s + Close[bad-,new] --> ~ Sync
RESPOND/s + Close[old,new] --> opt CLOSED/s Reset
RESPOND/s + Close[new,new] --> opt CLOSED/s Reset
RESPOND/s + Close[bad+,new] --> ~ Sync
RESPOND/s + Close[*,bad+] --> ~ Sync
RESPOND/s + Reset[*,bad-] --> ~
RESPOND/s + Reset[*,old] --> ~
RESPOND/s + Reset[bad-,new] --> ~
RESPOND/s + Reset[old,new] --> ~ TIMEWAIT/s
RESPOND/s + Reset[new,new] --> ~ TIMEWAIT/s
RESPOND/s + Reset[bad+,new] --> ~ TIMEWAIT/s
RESPOND/s + Reset[*,bad+] --> ~
RESPOND/s + Move[*,*] --> ~
RESPOND/s + Sync[*,bad-] --> ~
RESPOND/s + Sync[bad-,old] --> ~
RESPOND/s + Sync[old,old] --> opt OPEN/s SyncReply
RESPOND/s + Sync[new,old] --> opt OPEN/s SyncReply
RESPOND/s + Sync[bad+,old] --> opt OPEN/s SyncReply
RESPOND/s + Sync[bad-,new] --> ~
RESPOND/s + Sync[old,new] --> opt OPEN/s SyncReply
RESPOND/s + Sync[new,new] --> opt OPEN/s SyncReply
RESPOND/s + Sync[bad+,new] --> opt OPEN/s SyncReply
RESPOND/s + Sync[*,bad+] --> ~
RESPOND/s + SyncReply[*,bad-] --> ~
RESPOND/s + SyncReply[bad-,old] --> ~
RESPOND/s + SyncReply[old,old] --> opt OPEN/s
RESPOND/s + SyncReply[new,old] --> opt OPEN/s
RESPOND/s + SyncReply[bad+,old] --> opt OPEN/s
RESPOND/s + SyncReply[bad-,new] --> ~
RESPOND/s + SyncReply[old,new] --> opt OPEN/s
RESPOND/s + SyncReply[new,new] --> opt OPEN/s
RESPOND/s + SyncReply[bad+,new] --> opt OPEN/s
RESPOND/s + SyncReply[*,bad+] --> ~
OPEN/s + Request[bad-] --> ~ Sync
OPEN/s + Request[old] --> opt data
OPEN/s + Request[new] --> opt data
OPEN/s + Request[bad+] --> ~ Sync
OPEN/s + Response[*,bad-] --> ~ Sync
OPEN/s + Response[bad-,old] --> ~ Sync
OPEN/s + Response[old,old] --> ~ CLOSED/s Reset
OPEN/s + Response[new,old] --> ~ CLOSED/s Reset
OPEN/s + Response[bad+,old] --> ~ Sync
OPEN/s + Response[bad-,new] --> ~ Sync
OPEN/s + Response[old,new] --> ~ CLOSED/s Reset
OPEN/s + Response[new,new] --> ~ CLOSED/s Reset
OPEN/s + Response[bad+,new] --> ~ Sync
OPEN/s + Response[*,bad+] --> ~ Sync
OPEN/s + Data[bad-] --> ~ Sync
OPEN/s + Data[old] --> opt data
OPEN/s + Data[new] --> opt data
OPEN/s + Data[bad+] --> ~ Sync
OPEN/s + Ack[*,bad-] --> ~ Sync
OPEN/s + Ack[bad-,old] --> ~ Sync
OPEN/s + Ack[old,old] --> opt
OPEN/s + Ack[new,old] --> opt
OPEN/s + Ack[bad+,old] --> ~ Sync
OPEN/s + Ack[bad-,new] --> ~ Sync
OPEN/s + Ack[old,new] --> opt
OPEN/s + Ack[new,new] --> opt
OPEN/s + Ack[bad+,new] --> ~ Sync
OPEN/s + Ack[*,bad+] --> ~ Sync
OPEN/s + DataAck[*,bad-] --> ~ Sync
OPEN/s + DataAck[bad-,old] --> ~ Sync
OPEN/s + DataAck[old,old] --> opt data
OPEN/s + DataAck[new,old] --> opt data
OPEN/s + DataAck[bad+,old] --> ~ Sync
OPEN/s + DataAck[bad-,new] --> ~ Sync
OPEN/s + DataAck[old,new] --> opt data
OPEN/s + DataAck[new,new] --> opt data
OPEN/s + DataAck[bad+,new] --> ~ Sync
OPEN/s + DataAck[*,bad+] --> ~ Sync
OPEN/s + CloseReq[*,bad-] --> ~ Sync
OPEN/s + CloseReq[bad-,old] --> ~ Sync
OPEN/s + CloseReq[old,old] --> ~ CLOSED/s Reset
OPEN/s + CloseReq[new,old] --> ~ CLOSED/s Reset
OPEN/s + CloseReq[bad+,old] --> ~ Sync
OPEN/s + CloseReq[bad-,new] --> ~ Sync
OPEN/s + CloseReq[old,new] --> ~ CLOSED/s Reset
OPEN/s + CloseReq[new,new] --> ~ CLOSED/s Reset
OPEN/s + CloseReq[bad+,new] --> ~ Sync
OPEN/s + CloseReq[*,bad+] --> ~ Sync
OPEN/s + Close[*,bad-] --> ~ Sync
OPEN/s + Close[bad-,old] --> ~ Sync
OPEN/s + Close[old,old] --> opt CLOSED/s Reset
OPEN/s + Close[new,old] --> opt CLOSED/s Reset
OPEN/s + Close[bad+,old] --> ~ Sync
OPEN/s + Close[bad-,new] --> ~ Sync
OPEN/s + Close[old,new] --> opt CLOSED/s Reset
OPEN/s + Close[new,new] --> opt CLOSED/s Reset
OPEN/s + Close[bad+,new] --> ~ Sync
OPEN/s + Close[*,bad+] --> ~ Sync
OPEN/s + Reset[*,bad-] --> ~
OPEN/s + Reset[*,old] --> ~
OPEN/s + Reset[bad-,new] --> ~
OPEN/s + Reset[old,new] --> ~ TIMEWAIT/s
OPEN/s + Reset[new,new] --> ~ TIMEWAIT/s
OPEN/s + Reset[bad+,new] --> ~ TIMEWAIT/s
OPEN/s + Reset[*,bad+] --> ~
OPEN/s + Move[bad-,bad-] --> ~
OPEN/s + Move[old,bad-] --> opt addr Sync
OPEN/s + Move[new,bad-] --> opt addr Sync
OPEN/s + Move[bad+,bad-] --> opt addr Sync
OPEN/s + Move[bad-,old] --> ~
OPEN/s + Move[old,old] --> opt addr Sync
OPEN/s + Move[new,old] --> opt addr Sync
OPEN/s + Move[bad+,old] --> opt addr Sync
OPEN/s + Move[bad-,new] --> ~
OPEN/s + Move[old,new] --> opt addr Sync
OPEN/s + Move[new,new] --> opt addr Sync
OPEN/s + Move[bad+,new] --> opt addr Sync
OPEN/s + Move[*,bad+] --> ~
OPEN/s + Sync[*,bad-] --> ~
OPEN/s + Sync[bad-,old] --> ~
OPEN/s + Sync[old,old] --> opt SyncReply
OPEN/s + Sync[new,old] --> opt SyncReply
OPEN/s + Sync[bad+,old] --> opt SyncReply
OPEN/s + Sync[bad-,new] --> ~
OPEN/s + Sync[old,new] --> opt SyncReply
OPEN/s + Sync[new,new] --> opt SyncReply
OPEN/s + Sync[bad+,new] --> opt SyncReply
OPEN/s + Sync[*,bad+] --> ~
OPEN/s + SyncReply[*,bad-] --> ~
OPEN/s + SyncReply[bad-,old] --> ~
OPEN/s + SyncReply[old,old] --> opt
OPEN/s + SyncReply[new,old] --> opt
OPEN/s + SyncReply[bad+,old] --> opt
OPEN/s + SyncReply[bad-,new] --> ~
OPEN/s + SyncReply[old,new] --> opt
OPEN/s + SyncReply[new,new] --> opt
OPEN/s + SyncReply[bad+,new] --> opt
OPEN/s + SyncReply[*,bad+] --> ~
CLOSEREQ/s + Request[bad-] --> ~ Sync
CLOSEREQ/s + Request[old] --> opt data
CLOSEREQ/s + Request[new] --> opt data
CLOSEREQ/s + Request[bad+] --> ~ Sync
CLOSEREQ/s + Response[*,bad-] --> ~ Sync
CLOSEREQ/s + Response[bad-,old] --> ~ Sync
CLOSEREQ/s + Response[old,old] --> ~ CLOSED/s Reset
CLOSEREQ/s + Response[new,old] --> ~ CLOSED/s Reset
CLOSEREQ/s + Response[bad+,old] --> ~ Sync
CLOSEREQ/s + Response[bad-,new] --> ~ Sync
CLOSEREQ/s + Response[old,new] --> ~ CLOSED/s Reset
CLOSEREQ/s + Response[new,new] --> ~ CLOSED/s Reset
CLOSEREQ/s + Response[bad+,new] --> ~ Sync
CLOSEREQ/s + Response[*,bad+] --> ~ Sync
CLOSEREQ/s + Data[bad-] --> ~ Sync
CLOSEREQ/s + Data[old] --> opt data
CLOSEREQ/s + Data[new] --> opt data
CLOSEREQ/s + Data[bad+] --> ~ Sync
CLOSEREQ/s + Ack[*,bad-] --> ~ Sync
CLOSEREQ/s + Ack[bad-,old] --> ~ Sync
CLOSEREQ/s + Ack[old,old] --> opt
CLOSEREQ/s + Ack[new,old] --> opt
CLOSEREQ/s + Ack[bad+,old] --> ~ Sync
CLOSEREQ/s + Ack[bad-,new] --> ~ Sync
CLOSEREQ/s + Ack[old,new] --> opt
CLOSEREQ/s + Ack[new,new] --> opt
CLOSEREQ/s + Ack[bad+,new] --> ~ Sync
CLOSEREQ/s + Ack[*,bad+] --> ~ Sync
CLOSEREQ/s + DataAck[*,bad-] --> ~ Sync
CLOSEREQ/s + DataAck[bad-,old] --> ~ Sync
CLOSEREQ/s + DataAck[old,old] --> opt data
CLOSEREQ/s + DataAck[new,old] --> opt data
CLOSEREQ/s + DataAck[bad+,old] --> ~ Sync
CLOSEREQ/s + DataAck[bad-,new] --> ~ Sync
CLOSEREQ/s + DataAck[old,new] --> opt data
CLOSEREQ/s + DataAck[new,new] --> opt data
CLOSEREQ/s + DataAck[bad+,new] --> ~ Sync
CLOSEREQ/s + DataAck[*,bad+] --> ~ Sync
CLOSEREQ/s + CloseReq[*,bad-] --> ~ Sync
CLOSEREQ/s + CloseReq[bad-,old] --> ~ Sync
CLOSEREQ/s + CloseReq[old,old] --> ~ CLOSED/s Reset
CLOSEREQ/s + CloseReq[new,old] --> ~ CLOSED/s Reset
CLOSEREQ/s + CloseReq[bad+,old] --> ~ Sync
CLOSEREQ/s + CloseReq[bad-,new] --> ~ Sync
CLOSEREQ/s + CloseReq[old,new] --> ~ CLOSED/s Reset
CLOSEREQ/s + CloseReq[new,new] --> ~ CLOSED/s Reset
CLOSEREQ/s + CloseReq[bad+,new] --> ~ Sync
CLOSEREQ/s + CloseReq[*,bad+] --> ~ Sync
CLOSEREQ/s + Close[*,bad-] --> ~ Sync
CLOSEREQ/s + Close[bad-,old] --> ~ Sync
CLOSEREQ/s + Close[old,old] --> opt CLOSED/s Reset
CLOSEREQ/s + Close[new,old] --> opt CLOSED/s Reset
CLOSEREQ/s + Close[bad+,old] --> ~ Sync
CLOSEREQ/s + Close[bad-,new] --> ~ Sync
CLOSEREQ/s + Close[old,new] --> opt CLOSED/s Reset
CLOSEREQ/s + Close[new,new] --> opt CLOSED/s Reset
CLOSEREQ/s + Close[bad+,new] --> ~ Sync
CLOSEREQ/s + Close[*,bad+] --> ~ Sync
CLOSEREQ/s + Reset[*,bad-] --> ~
CLOSEREQ/s + Reset[*,old] --> ~
CLOSEREQ/s + Reset[bad-,new] --> ~
CLOSEREQ/s + Reset[old,new] --> ~ TIMEWAIT/s
CLOSEREQ/s + Reset[new,new] --> ~ TIMEWAIT/s
CLOSEREQ/s + Reset[bad+,new] --> ~ TIMEWAIT/s
CLOSEREQ/s + Reset[*,bad+] --> ~
CLOSEREQ/s + Move[bad-,bad-] --> ~
CLOSEREQ/s + Move[old,bad-] --> opt addr Sync
CLOSEREQ/s + Move[new,bad-] --> opt addr Sync
CLOSEREQ/s + Move[bad+,bad-] --> opt addr Sync
CLOSEREQ/s + Move[bad-,old] --> ~
CLOSEREQ/s + Move[old,old] --> opt addr Sync
CLOSEREQ/s + Move[new,old] --> opt addr Sync
CLOSEREQ/s + Move[bad+,old] --> opt addr Sync
CLOSEREQ/s + Move[bad-,new] --> ~
CLOSEREQ/s + Move[old,new] --> opt addr Sync
CLOSEREQ/s + Move[new,new] --> opt addr Sync
CLOSEREQ/s + Move[bad+,new] --> opt addr Sync
CLOSEREQ/s + Move[*,bad+] --> ~
CLOSEREQ/s + Sync[*,bad-] --> ~
CLOSEREQ/s + Sync[bad-,old] --> ~
CLOSEREQ/s + Sync[old,old] --> opt SyncReply
CLOSEREQ/s + Sync[new,old] --> opt SyncReply
CLOSEREQ/s + Sync[bad+,old] --> opt SyncReply
CLOSEREQ/s + Sync[bad-,new] --> ~
CLOSEREQ/s + Sync[old,new] --> opt SyncReply
CLOSEREQ/s + Sync[new,new] --> opt SyncReply
CLOSEREQ/s + Sync[bad+,new] --> opt SyncReply
CLOSEREQ/s + Sync[*,bad+] --> ~
CLOSEREQ/s + SyncReply[*,bad-] --> ~
CLOSEREQ/s + SyncReply[bad-,old] --> ~
CLOSEREQ/s + SyncReply[old,old] --> opt
CLOSEREQ/s + SyncReply[new,old] --> opt
CLOSEREQ/s + SyncReply[bad+,old] --> opt
CLOSEREQ/s + SyncReply[bad-,new] --> ~
CLOSEREQ/s + SyncReply[old,new] --> opt
CLOSEREQ/s + SyncReply[new,new] --> opt
CLOSEREQ/s + SyncReply[bad+,new] --> opt
CLOSEREQ/s + SyncReply[*,bad+] --> ~
CLOSING/s + Request[bad-] --> ~ Sync
CLOSING/s + Request[old] --> opt data
CLOSING/s + Request[new] --> opt data
CLOSING/s + Request[bad+] --> ~ Sync
CLOSING/s + Response[*,bad-] --> ~ Sync
CLOSING/s + Response[bad-,old] --> ~ Sync
CLOSING/s + Response[old,old] --> ~ CLOSED/s Reset
CLOSING/s + Response[new,old] --> ~ CLOSED/s Reset
CLOSING/s + Response[bad+,old] --> ~ Sync
CLOSING/s + Response[bad-,new] --> ~ Sync
CLOSING/s + Response[old,new] --> ~ CLOSED/s Reset
CLOSING/s + Response[new,new] --> ~ CLOSED/s Reset
CLOSING/s + Response[bad+,new] --> ~ Sync
CLOSING/s + Response[*,bad+] --> ~ Sync
CLOSING/s + Data[bad-] --> ~ Sync
CLOSING/s + Data[old] --> opt data
CLOSING/s + Data[new] --> opt data
CLOSING/s + Data[bad+] --> ~ Sync
CLOSING/s + Ack[*,bad-] --> ~ Sync
CLOSING/s + Ack[bad-,old] --> ~ Sync
CLOSING/s + Ack[old,old] --> opt
CLOSING/s + Ack[new,old] --> opt
CLOSING/s + Ack[bad+,old] --> ~ Sync
CLOSING/s + Ack[bad-,new] --> ~ Sync
CLOSING/s + Ack[old,new] --> opt
CLOSING/s + Ack[new,new] --> opt
CLOSING/s + Ack[bad+,new] --> ~ Sync
CLOSING/s + Ack[*,bad+] --> ~ Sync
CLOSING/s + DataAck[*,bad-] --> ~ Sync
CLOSING/s + DataAck[bad-,old] --> ~ Sync
CLOSING/s + DataAck[old,old] --> opt data
CLOSING/s + DataAck[new,old] --> opt data
CLOSING/s + DataAck[bad+,old] --> ~ Sync
CLOSING/s + DataAck[bad-,new] --> ~ Sync
CLOSING/s + DataAck[old,new] --> opt data
CLOSING/s + DataAck[new,new] --> opt data
CLOSING/s + DataAck[bad+,new] --> ~ Sync
CLOSING/s + DataAck[*,bad+] --> ~ Sync
CLOSING/s + CloseReq[*,bad-] --> ~ Sync
CLOSING/s + CloseReq[bad-,old] --> ~ Sync
CLOSING/s + CloseReq[old,old] --> ~ CLOSED/s Reset
CLOSING/s + CloseReq[new,old] --> ~ CLOSED/s Reset
CLOSING/s + CloseReq[bad+,old] --> ~ Sync
CLOSING/s + CloseReq[bad-,new] --> ~ Sync
CLOSING/s + CloseReq[old,new] --> ~ CLOSED/s Reset
CLOSING/s + CloseReq[new,new] --> ~ CLOSED/s Reset
CLOSING/s + CloseReq[bad+,new] --> ~ Sync
CLOSING/s + CloseReq[*,bad+] --> ~ Sync
CLOSING/s + Close[*,bad-] --> ~ Sync
CLOSING/s + Close[bad-,old] --> ~ Sync
CLOSING/s + Close[old,old] --> opt CLOSED/s Reset
CLOSING/s + Close[new,old] --> opt CLOSED/s Reset
CLOSING/s + Close[bad+,old] --> ~ Sync
CLOSING/s + Close[bad-,new] --> ~ Sync
CLOSING/s + Close[old,new] --> opt CLOSED/s Reset
CLOSING/s + Close[new,new] --> opt CLOSED/s Reset
CLOSING/s + Close[bad+,new] --> ~ Sync
CLOSING/s + Close[*,bad+] --> ~ Sync
CLOSING/s + Reset[*,bad-] --> ~
CLOSING/s + Reset[*,old] --> ~
CLOSING/s + Reset[bad-,new] --> ~
CLOSING/s + Reset[old,new] --> ~ TIMEWAIT/s
CLOSING/s + Reset[new,new] --> ~ TIMEWAIT/s
CLOSING/s + Reset[bad+,new] --> ~ TIMEWAIT/s
CLOSING/s + Reset[*,bad+] --> ~
CLOSING/s + Move[bad-,bad-] --> ~
CLOSING/s + Move[old,bad-] --> opt addr Sync
CLOSING/s + Move[new,bad-] --> opt addr Sync
CLOSING/s + Move[bad+,bad-] --> opt addr Sync
CLOSING/s + Move[bad-,old] --> ~
CLOSING/s + Move[old,old] --> opt addr Sync
CLOSING/s + Move[new,old] --> opt addr Sync
CLOSING/s + Move[bad+,old] --> opt addr Sync
CLOSING/s + Move[bad-,new] --> ~
CLOSING/s + Move[old,new] --> opt addr Sync
CLOSING/s + Move[new,new] --> opt addr Sync
CLOSING/s + Move[bad+,new] --> opt addr Sync
CLOSING/s + Move[*,bad+] --> ~
CLOSING/s + Sync[*,bad-] --> ~
CLOSING/s + Sync[bad-,old] --> ~
CLOSING/s + Sync[old,old] --> opt SyncReply
CLOSING/s + Sync[new,old] --> opt SyncReply
CLOSING/s + Sync[bad+,old] --> opt SyncReply
CLOSING/s + Sync[bad-,new] --> ~
CLOSING/s + Sync[old,new] --> opt SyncReply
CLOSING/s + Sync[new,new] --> opt SyncReply
CLOSING/s + Sync[bad+,new] --> opt SyncReply
CLOSING/s + Sync[*,bad+] --> ~
CLOSING/s + SyncReply[*,bad-] --> ~
CLOSING/s + SyncReply[bad-,old] --> ~
CLOSING/s + SyncReply[old,old] --> opt
CLOSING/s + SyncReply[new,old] --> opt
CLOSING/s + SyncReply[bad+,old] --> opt
CLOSING/s + SyncReply[bad-,new] --> ~
CLOSING/s + SyncReply[old,new] --> opt
CLOSING/s + SyncReply[new,new] --> opt
CLOSING/s + SyncReply[bad+,new] --> opt
CLOSING/s + SyncReply[*,bad+] --> ~
TIMEWAIT/s + Request[*] --> ~ Reset
TIMEWAIT/s + Response[*,*] --> ~ Reset
TIMEWAIT/s + Data[*] --> ~ Reset
TIMEWAIT/s + Ack[*,*] --> ~ Reset
TIMEWAIT/s + DataAck[*,*] --> ~ Reset
TIMEWAIT/s + CloseReq[*,*] --> ~ Reset
TIMEWAIT/s + Close[*,*] --> ~ Reset
TIMEWAIT/s + Reset[*,*] --> ~
TIMEWAIT/s + Move[*,*] --> ~
TIMEWAIT/s + Sync[*,*] --> ~ Reset
TIMEWAIT/s + SyncReply[*,*] --> ~ Reset
_______________________________________________
dccp IETF mailing list: dccp@ietf.org
list info: https://www1.ietf.org/mailman/listinfo/dccp
wg charter: http://www.ietf.org/html.charters/dccp-charter.html