[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