OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /or1k/trunk/linux/linux-2.4/net/802
    from Rev 1275 to Rev 1765
    Reverse comparison

Rev 1275 → Rev 1765

/transit/pdutr.pre
0,0 → 1,1121
COMPILE pdutr INDEX
;
; Transition tables for incoming pdu events.
; translate this thing into C with
; awk -f ./compile.awk pdu.trans > pdutr.h
;
TABLE ADM
;Transition table for the ADM state:
;
;frame type p bit action newstate
;received in frame
;
I_CMD 0 ADM5 ADM
I_CMD 1 ADM4 ADM
RR_CMD 0 ADM5 ADM
RR_CMD 1 ADM4 ADM
RNR_CMD 0 ADM5 ADM
RNR_CMD 1 ADM4 ADM
REJ_CMD 0 ADM5 ADM
REJ_CMD 1 ADM4 ADM
DISC_CMD 0 ADM3 ADM
DISC_CMD 1 ADM3 ADM
SABME_CMD 0 ADM2 CONN
SABME_CMD 1 ADM2 CONN
I_RSP 0 ADM5 ADM
I_RSP 1 ADM5 ADM
RR_RSP 0 ADM5 ADM
RR_RSP 1 ADM5 ADM
RNR_RSP 0 ADM5 ADM
RNR_RSP 1 ADM5 ADM
REJ_RSP 0 ADM5 ADM
REJ_RSP 1 ADM5 ADM
UA_RSP 0 ADM5 ADM
UA_RSP 1 ADM5 ADM
DM_RSP 0 ADM5 ADM
DM_RSP 1 ADM5 ADM
FRMR_RSP 0 ADM5 ADM
FRMR_RSP 1 ADM5 ADM
;
TABLE CONN
;
;Transition table for the CONN state:
;
;frame type action newstate
;received
;
I_CMD CONN5 CONN
RR_CMD CONN5 CONN
RNR_CMD CONN5 CONN
REJ_CMD CONN5 CONN
DISC_CMD CONN5 CONN
SABME_CMD CONN3 CONN
I_RSP CONN5 CONN
RR_RSP CONN5 CONN
RNR_RSP CONN5 CONN
REJ_RSP CONN5 CONN
UA_RSP CONN5 CONN
DM_RSP CONN4 ADM
FRMR_RSP CONN5 CONN
;
TABLE RESET_WAIT
;Transition table for the RESET_WAIT
;
;frame type action newstate
;received
;
I_CMD RESWAIT8 RESET_WAIT
RR_CMD RESWAIT8 RESET_WAIT
RNR_CMD RESWAIT8 RESET_WAIT
REJ_CMD RESWAIT8 RESET_WAIT
DISC_CMD RESWAIT7 RESET_WAIT
SABME_CMD RESWAIT6 RESET_WAIT
I_RSP RESWAIT8 RESET_WAIT
RR_RSP RESWAIT8 RESET_WAIT
RNR_RSP RESWAIT8 RESET_WAIT
REJ_RSP RESWAIT8 RESET_WAIT
UA_RSP RESWAIT8 RESET_WAIT
DM_RSP RESWAIT5 ADM
FRMR_RSP RESWAIT8 RESET_WAIT
;
;
TABLE RESET_CHECK
;Transition table for the RESET_CHECK state
;
;frame type action newstate
;received
;
I_CMD RESCHK6 RESET_CHECK
RR_CMD RESCHK6 RESET_CHECK
RNR_CMD RESCHK6 RESET_CHECK
REJ_CMD RESCHK6 RESET_CHECK
DISC_CMD RESCHK5 ADM
SABME_CMD RESCHK4 RESET_CHECK
I_RSP RESCHK6 RESET_CHECK
RR_RSP RESCHK6 RESET_CHECK
RNR_RSP RESCHK6 RESET_CHECK
REJ_RSP RESCHK6 RESET_CHECK
UA_RSP RESCHK6 RESET_CHECK
DM_RSP RESCHK3 ADM
FRMR_RSP RESCHK6 RESET_CHECK
;
;
TABLE SETUP
;Transition table for the SETUP state
;
;frame type p flag action newstate
;received = f
;
I_CMD 0 SETUP6 SETUP
I_CMD 1 SETUP6 SETUP
RR_CMD 0 SETUP6 SETUP
RR_CMD 1 SETUP6 SETUP
RNR_CMD 0 SETUP6 SETUP
RNR_CMD 1 SETUP6 SETUP
REJ_CMD 0 SETUP6 SETUP
REJ_CMD 1 SETUP6 SETUP
DISC_CMD 0 SETUP4 ADM
DISC_CMD 1 SETUP4 ADM
SABME_CMD 0 SETUP1 SETUP
SABME_CMD 1 SETUP1 SETUP
I_RSP 0 SETUP6 SETUP
I_RSP 1 SETUP6 SETUP
RR_RSP 0 SETUP6 SETUP
RR_RSP 1 SETUP6 SETUP
RNR_RSP 0 SETUP6 SETUP
RNR_RSP 1 SETUP6 SETUP
REJ_RSP 0 SETUP6 SETUP
REJ_RSP 1 SETUP6 SETUP
UA_RSP 0 SETUP6 SETUP
UA_RSP 1 SETUP2 NORMAL
DM_RSP 0 SETUP5 ADM
DM_RSP 1 SETUP5 ADM
FRMR_RSP 0 SETUP6 SETUP
FRMR_RSP 1 SETUP6 SETUP
;
;
TABLE RESET
;Transition table for the RESET state:
;
;frame type p flag action newstate
;received = f
;
I_CMD 0 RESET6 RESET
I_CMD 1 RESET6 RESET
RR_CMD 0 RESET6 RESET
RR_CMD 1 RESET6 RESET
RNR_CMD 0 RESET6 RESET
RNR_CMD 1 RESET6 RESET
REJ_CMD 0 RESET6 RESET
REJ_CMD 1 RESET6 RESET
DISC_CMD 0 RESET4 ADM
DISC_CMD 1 RESET4 ADM
SABME_CMD 0 RESET1 RESET
SABME_CMD 1 RESET1 RESET
I_RSP 0 RESET6 RESET
I_RSP 1 RESET6 RESET
RR_RSP 0 RESET6 RESET
RR_RSP 1 RESET6 RESET
RNR_RSP 0 RESET6 RESET
RNR_RSP 1 RESET6 RESET
REJ_RSP 0 RESET6 RESET
REJ_RSP 1 RESET6 RESET
UA_RSP 0 RESET6 RESET
UA_RSP 1 RESET2 NORMAL
DM_RSP 0 RESET5 ADM
DM_RSP 1 RESET5 ADM
FRMR_RSP 0 RESET6 RESET
FRMR_RSP 1 RESET6 RESET
;
;
TABLE D_CONN
;Transition table for the D_CONN state:
;
;frame type p bit action newstate
;received in frame
I_CMD 0 D_CONN5 D_CONN
I_CMD 1 D_CONN5 D_CONN
RR_CMD 0 D_CONN5 D_CONN
RR_CMD 1 D_CONN5 D_CONN
RNR_CMD 0 D_CONN5 D_CONN
RNR_CMD 1 D_CONN5 D_CONN
REJ_CMD 0 D_CONN5 D_CONN
REJ_CMD 1 D_CONN5 D_CONN
DISC_CMD 0 D_CONN3 D_CONN
DISC_CMD 1 D_CONN3 D_CONN
SABME_CMD 0 D_CONN1 ADM
SABME_CMD 1 D_CONN1 ADM
I_RSP 0 D_CONN5 D_CONN
I_RSP 1 D_CONN5 D_CONN
RR_RSP 0 D_CONN5 D_CONN
RR_RSP 1 D_CONN5 D_CONN
RNR_RSP 0 D_CONN5 D_CONN
RNR_RSP 1 D_CONN5 D_CONN
REJ_RSP 0 D_CONN5 D_CONN
REJ_RSP 1 D_CONN5 D_CONN
UA_RSP 0 D_CONN5 D_CONN
UA_RSP 1 D_CONN4 ADM
DM_RSP 0 D_CONN4 ADM
DM_RSP 1 D_CONN5 ADM
FRMR_RSP 0 D_CONN5 D_CONN
FRMR_RSP 1 D_CONN5 D_CONN
;
;
TABLE ERROR
;Transition table for the ERROR state:
;
;frame type action newstate
;received
;
I_CMD ERR5 ERROR
RR_CMD ERR5 ERROR
RNR_CMD ERR5 ERROR
REJ_CMD ERR5 ERROR
DISC_CMD ERR2 ADM
SABME_CMD ERR1 RESET_CHECK
I_RSP ERR6 ERROR
RR_RSP ERR6 ERROR
RNR_RSP ERR6 ERROR
REJ_RSP ERR6 ERROR
UA_RSP ERR6 ERROR
DM_RSP ERR3 ADM
FRMR_RSP ERR4 RESET_WAIT
;
TABLE NORMAL
;Transition table for the NORMAL state:
;
;frame type uexpect p bit p_flag
;received N(S) in frame
;
I_CMD 0 0 0 NORMAL8B NORMAL
I_CMD 0 0 1 NORMAL9 NORMAL
I_CMD 0 1 0 NORMAL10 NORMAL
I_CMD 0 1 1 NORMAL10 NORMAL
I_CMD 1 0 0 NORMAL5 REJECT
I_CMD 1 0 1 NORMAL6 REJECT
I_CMD 1 1 0 NORMAL7 REJECT
I_CMD 1 1 1 NORMAL7 REJECT
RR_CMD 0 0 0 NORMAL11 NORMAL
RR_CMD 0 0 1 NORMAL11 NORMAL
RR_CMD 0 1 0 NORMAL12 NORMAL
RR_CMD 0 1 1 NORMAL12 NORMAL
RR_CMD 1 0 0 NORMAL11 NORMAL
RR_CMD 1 0 1 NORMAL11 NORMAL
RR_CMD 1 1 0 NORMAL12 NORMAL
RR_CMD 1 1 1 NORMAL12 NORMAL
RNR_CMD 0 0 0 NORMAL13 NORMAL
RNR_CMD 0 0 1 NORMAL13 NORMAL
RNR_CMD 0 1 0 NORMAL14 NORMAL
RNR_CMD 0 1 1 NORMAL14 NORMAL
RNR_CMD 1 0 0 NORMAL13 NORMAL
RNR_CMD 1 0 1 NORMAL13 NORMAL
RNR_CMD 1 1 0 NORMAL14 NORMAL
RNR_CMD 1 1 1 NORMAL14 NORMAL
REJ_CMD 0 0 0 NORMAL15 NORMAL
REJ_CMD 0 0 1 NORMAL16 NORMAL
REJ_CMD 0 1 0 NORMAL17 NORMAL
REJ_CMD 0 1 1 NORMAL17 NORMAL
REJ_CMD 1 0 0 NORMAL15 NORMAL
REJ_CMD 1 0 1 NORMAL16 NORMAL
REJ_CMD 1 1 0 NORMAL17 NORMAL
REJ_CMD 1 1 1 NORMAL17 NORMAL
DISC_CMD 0 0 0 SH4 ADM
DISC_CMD 0 0 1 SH4 ADM
DISC_CMD 0 1 0 SH4 ADM
DISC_CMD 0 1 1 SH4 ADM
DISC_CMD 1 0 0 SH4 ADM
DISC_CMD 1 0 1 SH4 ADM
DISC_CMD 1 1 0 SH4 ADM
DISC_CMD 1 1 1 SH4 ADM
SABME_CMD 0 0 0 SH3 RESET_CHECK
SABME_CMD 0 0 1 SH3 RESET_CHECK
SABME_CMD 0 1 0 SH3 RESET_CHECK
SABME_CMD 0 1 1 SH3 RESET_CHECK
SABME_CMD 1 0 0 SH3 RESET_CHECK
SABME_CMD 1 0 1 SH3 RESET_CHECK
SABME_CMD 1 1 0 SH3 RESET_CHECK
SABME_CMD 1 1 1 SH3 RESET_CHECK
I_RSP 0 0 0 NORMAL8B NORMAL
I_RSP 0 0 1 NORMAL9 NORMAL
I_RSP 0 1 0 SH10 ERROR
I_RSP 0 1 1 NORMAL8A NORMAL
I_RSP 1 0 0 NORMAL5 REJECT
I_RSP 1 0 1 NORMAL6 REJECT
I_RSP 1 1 0 SH10 ERROR
I_RSP 1 1 1 NORMAL5 REJECT
RR_RSP 0 0 0 NORMAL11 NORMAL
RR_RSP 0 0 1 NORMAL11 NORMAL
RR_RSP 0 1 0 SH10 ERROR
RR_RSP 0 1 1 NORMAL11 NORMAL
RR_RSP 1 0 0 NORMAL11 NORMAL
RR_RSP 1 0 1 NORMAL11 NORMAL
RR_RSP 1 1 0 SH10 ERROR
RR_RSP 1 1 1 NORMAL11 NORMAL
RNR_RSP 0 0 0 NORMAL13 NORMAL
RNR_RSP 0 0 1 NORMAL13 NORMAL
RNR_RSP 0 1 0 SH10 ERROR
RNR_RSP 0 1 1 NORMAL13 NORMAL
RNR_RSP 1 0 0 NORMAL13 NORMAL
RNR_RSP 1 0 1 NORMAL13 NORMAL
RNR_RSP 1 1 0 SH10 ERROR
RNR_RSP 1 1 1 NORMAL13 NORMAL
REJ_RSP 0 0 0 NORMAL15 NORMAL
REJ_RSP 0 0 1 NORMAL16 NORMAL
REJ_RSP 0 1 0 SH10 ERROR
REJ_RSP 0 1 1 NORMAL15 NORMAL
REJ_RSP 1 0 0 NORMAL15 NORMAL
REJ_RSP 1 0 1 NORMAL16 NORMAL
REJ_RSP 1 1 0 SH10 ERROR
REJ_RSP 1 1 1 NORMAL15 NORMAL
UA_RSP 0 0 0 SH9 ERROR
UA_RSP 0 0 1 SH9 ERROR
UA_RSP 0 1 0 SH9 ERROR
UA_RSP 0 1 1 SH9 ERROR
UA_RSP 1 0 0 SH9 ERROR
UA_RSP 1 0 1 SH9 ERROR
UA_RSP 1 1 0 SH9 ERROR
UA_RSP 1 1 1 SH9 ERROR
DM_RSP 0 0 0 SH6 ADM
DM_RSP 0 0 1 SH6 ADM
DM_RSP 0 1 0 SH6 ADM
DM_RSP 0 1 1 SH6 ADM
DM_RSP 1 0 0 SH6 ADM
DM_RSP 1 0 1 SH6 ADM
DM_RSP 1 1 0 SH6 ADM
DM_RSP 1 1 1 SH6 ADM
FRMR_RSP 0 0 0 SH5 RESET_WAIT
FRMR_RSP 0 0 1 SH5 RESET_WAIT
FRMR_RSP 0 1 0 SH5 RESET_WAIT
FRMR_RSP 0 1 1 SH5 RESET_WAIT
FRMR_RSP 1 0 0 SH5 RESET_WAIT
FRMR_RSP 1 0 1 SH5 RESET_WAIT
FRMR_RSP 1 1 0 SH5 RESET_WAIT
FRMR_RSP 1 1 1 SH5 RESET_WAIT
BAD_FRAME 0 0 0 SH7 ERROR
BAD_FRAME 0 0 1 SH7 ERROR
BAD_FRAME 0 1 0 SH7 ERROR
BAD_FRAME 0 1 1 SH7 ERROR
BAD_FRAME 1 0 0 SH7 ERROR
BAD_FRAME 1 0 1 SH7 ERROR
BAD_FRAME 1 1 0 SH7 ERROR
BAD_FRAME 1 1 1 SH7 ERROR
;
;112 entries in table, 8 modified by tredit4 SABME_CMD x x x SH3 RESET_CHECK
;112 entries in table, 8 modified by tredit4 DISC_CMD x x x SH4 ADM
;112 entries in table, 8 modified by tredit4 FRMR_RSP x x x SH5 RESET_WAIT
;112 entries in table, 8 modified by tredit4 DM_RSP x x x SH6 ADM
;112 entries in table, 8 modified by tredit4 BAD_FRAME x x x SH7 ERROR
;112 entries in table, 8 modified by tredit4 UA_RSP x x x SH9 ERROR
;112 entries in table, 8 modified by tredit4 anyrsp x 1 0 SH10 ERROR
;112 entries in table, 1 modified by tredit4 I_CMD 1 0 0 NORMAL5 REJECT
;112 entries in table, 1 modified by tredit4 I_RSP 1 0 0 NORMAL5 REJECT
;112 entries in table, 1 modified by tredit4 I_RSP 1 1 1 NORMAL5 REJECT
;112 entries in table, 1 modified by tredit4 I_CMD 1 0 1 NORMAL6 REJECT
;112 entries in table, 1 modified by tredit4 I_RSP 1 0 1 NORMAL6 REJECT
;112 entries in table, 2 modified by tredit4 I_CMD 1 1 x NORMAL7 REJECT
;112 entries in table, 1 modified by tredit4 I_RSP x 1 1 NORMAL8A NORMAL
;112 entries in table, 1 modified by tredit4 I_RSP x 0 0 NORMAL8B NORMAL
;112 entries in table, 1 modified by tredit4 I_CMD x 0 0 NORMAL8B NORMAL
;112 entries in table, 1 modified by tredit4 I_RSP x 0 1 NORMAL9 NORMAL
;112 entries in table, 1 modified by tredit4 I_CMD x 0 1 NORMAL9 NORMAL
;112 entries in table, 2 modified by tredit4 I_CMD x 1 x NORMAL10 NORMAL
;112 entries in table, 4 modified by tredit4 RR_CMD x 0 x NORMAL11 NORMAL
;112 entries in table, 4 modified by tredit4 RR_RSP x 0 x NORMAL11 NORMAL
;112 entries in table, 2 modified by tredit4 RR_RSP x 1 1 NORMAL11 NORMAL
;112 entries in table, 4 modified by tredit4 RR_CMD x 1 x NORMAL12 NORMAL
;112 entries in table, 4 modified by tredit4 RNR_CMD x 0 x NORMAL13 NORMAL
;112 entries in table, 4 modified by tredit4 RNR_RSP x 0 x NORMAL13 NORMAL
;112 entries in table, 2 modified by tredit4 RNR_RSP x 1 1 NORMAL13 NORMAL
;112 entries in table, 4 modified by tredit4 RNR_CMD x 1 x NORMAL14 NORMAL
;112 entries in table, 2 modified by tredit4 REJ_CMD x 0 0 NORMAL15 NORMAL
;112 entries in table, 2 modified by tredit4 REJ_RSP x 1 1 NORMAL15 NORMAL
;112 entries in table, 2 modified by tredit4 REJ_RSP x 0 0 NORMAL15 NORMAL
;112 entries in table, 2 modified by tredit4 REJ_CMD x 0 1 NORMAL16 NORMAL
;112 entries in table, 2 modified by tredit4 REJ_RSP x 0 1 NORMAL16 NORMAL
;112 entries in table, 4 modified by tredit4 REJ_CMD x 1 x NORMAL17 NORMAL
;
TABLE BUSY
;Transition table for the BUSY state:
;
;frame type uexpect p bit p_flag
;received N(S) in frame
;
I_CMD 0 0 0 BUSY13 BUSY
I_CMD 0 0 1 BUSY14 BUSY
I_CMD 0 1 0 BUSY12 BUSY
I_CMD 0 1 1 BUSY12 BUSY
I_CMD 1 0 0 BUSY9 BUSY
I_CMD 1 0 1 BUSY10 BUSY
I_CMD 1 1 0 BUSY11 BUSY
I_CMD 1 1 1 BUSY11 BUSY
RR_CMD 0 0 0 BUSY15 BUSY
RR_CMD 0 0 1 BUSY15 BUSY
RR_CMD 0 1 0 BUSY16 BUSY
RR_CMD 0 1 1 BUSY16 BUSY
RR_CMD 1 0 0 BUSY15 BUSY
RR_CMD 1 0 1 BUSY15 BUSY
RR_CMD 1 1 0 BUSY16 BUSY
RR_CMD 1 1 1 BUSY16 BUSY
RNR_CMD 0 0 0 BUSY17 BUSY
RNR_CMD 0 0 1 BUSY17 BUSY
RNR_CMD 0 1 0 BUSY18 BUSY
RNR_CMD 0 1 1 BUSY18 BUSY
RNR_CMD 1 0 0 BUSY17 BUSY
RNR_CMD 1 0 1 BUSY17 BUSY
RNR_CMD 1 1 0 BUSY18 BUSY
RNR_CMD 1 1 1 BUSY18 BUSY
REJ_CMD 0 0 0 BUSY19 BUSY
REJ_CMD 0 0 1 BUSY20 BUSY
REJ_CMD 0 1 0 BUSY21 BUSY
REJ_CMD 0 1 1 BUSY21 BUSY
REJ_CMD 1 0 0 BUSY19 BUSY
REJ_CMD 1 0 1 BUSY20 BUSY
REJ_CMD 1 1 0 BUSY21 BUSY
REJ_CMD 1 1 1 BUSY21 BUSY
DISC_CMD 0 0 0 SH4 ADM
DISC_CMD 0 0 1 SH4 ADM
DISC_CMD 0 1 0 SH4 ADM
DISC_CMD 0 1 1 SH4 ADM
DISC_CMD 1 0 0 SH4 ADM
DISC_CMD 1 0 1 SH4 ADM
DISC_CMD 1 1 0 SH4 ADM
DISC_CMD 1 1 1 SH4 ADM
SABME_CMD 0 0 0 SH3 RESET_CHECK
SABME_CMD 0 0 1 SH3 RESET_CHECK
SABME_CMD 0 1 0 SH3 RESET_CHECK
SABME_CMD 0 1 1 SH3 RESET_CHECK
SABME_CMD 1 0 0 SH3 RESET_CHECK
SABME_CMD 1 0 1 SH3 RESET_CHECK
SABME_CMD 1 1 0 SH3 RESET_CHECK
SABME_CMD 1 1 1 SH3 RESET_CHECK
I_RSP 0 0 0 BUSY13 BUSY
I_RSP 0 0 1 BUSY14 BUSY
I_RSP 0 1 0 SH10 ERROR
I_RSP 0 1 1 BUSY13 BUSY
I_RSP 1 0 0 BUSY9 BUSY
I_RSP 1 0 1 BUSY10 BUSY
I_RSP 1 1 0 SH10 ERROR
I_RSP 1 1 1 BUSY9 BUSY
RR_RSP 0 0 0 BUSY15 BUSY
RR_RSP 0 0 1 BUSY15 BUSY
RR_RSP 0 1 0 SH10 ERROR
RR_RSP 0 1 1 BUSY15 BUSY
RR_RSP 1 0 0 BUSY15 BUSY
RR_RSP 1 0 1 BUSY15 BUSY
RR_RSP 1 1 0 SH10 ERROR
RR_RSP 1 1 1 BUSY15 BUSY
RNR_RSP 0 0 0 BUSY17 BUSY
RNR_RSP 0 0 1 BUSY17 BUSY
RNR_RSP 0 1 0 SH10 ERROR
RNR_RSP 0 1 1 BUSY17 BUSY
RNR_RSP 1 0 0 BUSY17 BUSY
RNR_RSP 1 0 1 BUSY17 BUSY
RNR_RSP 1 1 0 SH10 ERROR
RNR_RSP 1 1 1 BUSY17 BUSY
REJ_RSP 0 0 0 BUSY19 BUSY
REJ_RSP 0 0 1 BUSY20 BUSY
REJ_RSP 0 1 0 SH10 ERROR
REJ_RSP 0 1 1 BUSY19 BUSY
REJ_RSP 1 0 0 BUSY19 BUSY
REJ_RSP 1 0 1 BUSY20 BUSY
REJ_RSP 1 1 0 SH10 ERROR
REJ_RSP 1 1 1 BUSY19 BUSY
UA_RSP 0 0 0 SH9 ERROR
UA_RSP 0 0 1 SH9 ERROR
UA_RSP 0 1 0 SH9 ERROR
UA_RSP 0 1 1 SH9 ERROR
UA_RSP 1 0 0 SH9 ERROR
UA_RSP 1 0 1 SH9 ERROR
UA_RSP 1 1 0 SH9 ERROR
UA_RSP 1 1 1 SH9 ERROR
DM_RSP 0 0 0 SH6 ADM
DM_RSP 0 0 1 SH6 ADM
DM_RSP 0 1 0 SH6 ADM
DM_RSP 0 1 1 SH6 ADM
DM_RSP 1 0 0 SH6 ADM
DM_RSP 1 0 1 SH6 ADM
DM_RSP 1 1 0 SH6 ADM
DM_RSP 1 1 1 SH6 ADM
FRMR_RSP 0 0 0 SH5 RESET_WAIT
FRMR_RSP 0 0 1 SH5 RESET_WAIT
FRMR_RSP 0 1 0 SH5 RESET_WAIT
FRMR_RSP 0 1 1 SH5 RESET_WAIT
FRMR_RSP 1 0 0 SH5 RESET_WAIT
FRMR_RSP 1 0 1 SH5 RESET_WAIT
FRMR_RSP 1 1 0 SH5 RESET_WAIT
FRMR_RSP 1 1 1 SH5 RESET_WAIT
BAD_FRAME 0 0 0 SH7 ERROR
BAD_FRAME 0 0 1 SH7 ERROR
BAD_FRAME 0 1 0 SH7 ERROR
BAD_FRAME 0 1 1 SH7 ERROR
BAD_FRAME 1 0 0 SH7 ERROR
BAD_FRAME 1 0 1 SH7 ERROR
BAD_FRAME 1 1 0 SH7 ERROR
BAD_FRAME 1 1 1 SH7 ERROR
;
;112 entries in table, 8 modified by tredit4 SABME_CMD x x x SH3 RESET_CHECK
;112 entries in table, 8 modified by tredit4 DISC_CMD x x x SH4 ADM
;112 entries in table, 8 modified by tredit4 FRMR_RSP x x x SH5 RESET_WAIT
;112 entries in table, 8 modified by tredit4 DM_RSP x x x SH6 ADM
;112 entries in table, 8 modified by tredit4 BAD_FRAME x x x SH7 ERROR
;112 entries in table, 8 modified by tredit4 UA_RSP x x x SH9 ERROR
;112 entries in table, 8 modified by tredit4 anyrsp x 1 0 SH10 ERROR
;112 entries in table, 1 modified by tredit4 I_RSP 1 0 0 BUSY9 BUSY
;112 entries in table, 1 modified by tredit4 I_RSP 1 1 1 BUSY9 BUSY
;112 entries in table, 1 modified by tredit4 I_CMD 1 0 0 BUSY9 BUSY
;112 entries in table, 1 modified by tredit4 I_RSP 1 0 1 BUSY10 BUSY
;112 entries in table, 1 modified by tredit4 I_CMD 1 0 1 BUSY10 BUSY
;112 entries in table, 2 modified by tredit4 I_CMD 1 1 x BUSY11 BUSY
;112 entries in table, 2 modified by tredit4 I_CMD x 1 x BUSY12 BUSY
;112 entries in table, 1 modified by tredit4 I_RSP x 0 0 BUSY13 BUSY
;112 entries in table, 1 modified by tredit4 I_RSP x 1 1 BUSY13 BUSY
;112 entries in table, 1 modified by tredit4 I_CMD x 0 0 BUSY13 BUSY
;112 entries in table, 1 modified by tredit4 I_RSP x 0 1 BUSY14 BUSY
;112 entries in table, 1 modified by tredit4 I_CMD x 0 1 BUSY14 BUSY
;112 entries in table, 4 modified by tredit4 RR_CMD x 0 x BUSY15 BUSY
;112 entries in table, 4 modified by tredit4 RR_RSP x 0 x BUSY15 BUSY
;112 entries in table, 2 modified by tredit4 RR_RSP x 1 1 BUSY15 BUSY
;112 entries in table, 4 modified by tredit4 RR_CMD x 1 x BUSY16 BUSY
;112 entries in table, 4 modified by tredit4 RNR_CMD x 0 x BUSY17 BUSY
;112 entries in table, 4 modified by tredit4 RNR_RSP x 0 x BUSY17 BUSY
;112 entries in table, 2 modified by tredit4 RNR_RSP x 1 1 BUSY17 BUSY
;112 entries in table, 4 modified by tredit4 RNR_CMD x 1 x BUSY18 BUSY
;112 entries in table, 2 modified by tredit4 REJ_CMD x 0 0 BUSY19 BUSY
;112 entries in table, 2 modified by tredit4 REJ_RSP x 0 0 BUSY19 BUSY
;112 entries in table, 2 modified by tredit4 REJ_RSP x 1 1 BUSY19 BUSY
;112 entries in table, 2 modified by tredit4 REJ_CMD x 0 1 BUSY20 BUSY
;112 entries in table, 2 modified by tredit4 REJ_RSP x 0 1 BUSY20 BUSY
;112 entries in table, 4 modified by tredit4 REJ_CMD x 1 x BUSY21 BUSY
;
TABLE REJECT
;Transition table for the REJECT state:
;
;frame type uexpect p bit p_flag
;received N(S) in frame
;
I_CMD 0 0 0 REJECT7 REJECT
I_CMD 0 0 1 REJECT8 REJECT
I_CMD 0 1 0 REJECT9 REJECT
I_CMD 0 1 1 REJECT9 REJECT
I_CMD 1 0 0 REJECT5 REJECT
I_CMD 1 0 1 REJECT5 REJECT
I_CMD 1 1 0 REJECT6 REJECT
I_CMD 1 1 1 REJECT6 REJECT
RR_CMD 0 0 0 REJECT10 REJECT
RR_CMD 0 0 1 REJECT10 REJECT
RR_CMD 0 1 0 REJECT11 REJECT
RR_CMD 0 1 1 REJECT11 REJECT
RR_CMD 1 0 0 REJECT10 REJECT
RR_CMD 1 0 1 REJECT10 REJECT
RR_CMD 1 1 0 REJECT11 REJECT
RR_CMD 1 1 1 REJECT11 REJECT
RNR_CMD 0 0 0 REJECT12 REJECT
RNR_CMD 0 0 1 REJECT12 REJECT
RNR_CMD 0 1 0 REJECT13 REJECT
RNR_CMD 0 1 1 REJECT13 REJECT
RNR_CMD 1 0 0 REJECT12 REJECT
RNR_CMD 1 0 1 REJECT12 REJECT
RNR_CMD 1 1 0 REJECT13 REJECT
RNR_CMD 1 1 1 REJECT13 REJECT
REJ_CMD 0 0 0 REJECT14 REJECT
REJ_CMD 0 0 1 REJECT15 REJECT
REJ_CMD 0 1 0 REJECT16 REJECT
REJ_CMD 0 1 1 REJECT16 REJECT
REJ_CMD 1 0 0 REJECT14 REJECT
REJ_CMD 1 0 1 REJECT15 REJECT
REJ_CMD 1 1 0 REJECT16 REJECT
REJ_CMD 1 1 1 REJECT16 REJECT
DISC_CMD 0 0 0 SH4 ADM
DISC_CMD 0 0 1 SH4 ADM
DISC_CMD 0 1 0 SH4 ADM
DISC_CMD 0 1 1 SH4 ADM
DISC_CMD 1 0 0 SH4 ADM
DISC_CMD 1 0 1 SH4 ADM
DISC_CMD 1 1 0 SH4 ADM
DISC_CMD 1 1 1 SH4 ADM
SABME_CMD 0 0 0 SH3 RESET_CHECK
SABME_CMD 0 0 1 SH3 RESET_CHECK
SABME_CMD 0 1 0 SH3 RESET_CHECK
SABME_CMD 0 1 1 SH3 RESET_CHECK
SABME_CMD 1 0 0 SH3 RESET_CHECK
SABME_CMD 1 0 1 SH3 RESET_CHECK
SABME_CMD 1 1 0 SH3 RESET_CHECK
SABME_CMD 1 1 1 SH3 RESET_CHECK
I_RSP 0 0 0 REJECT7 REJECT
I_RSP 0 0 1 REJECT8 REJECT
I_RSP 0 1 0 SH10 ERROR
I_RSP 0 1 1 REJECT7 REJECT
I_RSP 1 0 0 REJECT5 REJECT
I_RSP 1 0 1 REJECT5 REJECT
I_RSP 1 1 0 SH10 ERROR
I_RSP 1 1 1 REJECT5 REJECT
RR_RSP 0 0 0 REJECT10 REJECT
RR_RSP 0 0 1 REJECT10 REJECT
RR_RSP 0 1 0 SH10 ERROR
RR_RSP 0 1 1 REJECT10 REJECT
RR_RSP 1 0 0 REJECT10 REJECT
RR_RSP 1 0 1 REJECT10 REJECT
RR_RSP 1 1 0 SH10 ERROR
RR_RSP 1 1 1 REJECT10 REJECT
RNR_RSP 0 0 0 REJECT12 REJECT
RNR_RSP 0 0 1 REJECT12 REJECT
RNR_RSP 0 1 0 SH10 ERROR
RNR_RSP 0 1 1 REJECT12 REJECT
RNR_RSP 1 0 0 REJECT12 REJECT
RNR_RSP 1 0 1 REJECT12 REJECT
RNR_RSP 1 1 0 SH10 ERROR
RNR_RSP 1 1 1 REJECT12 REJECT
REJ_RSP 0 0 0 REJECT14 REJECT
REJ_RSP 0 0 1 REJECT15 REJECT
REJ_RSP 0 1 0 SH10 ERROR
REJ_RSP 0 1 1 REJECT14 REJECT
REJ_RSP 1 0 0 REJECT14 REJECT
REJ_RSP 1 0 1 REJECT15 REJECT
REJ_RSP 1 1 0 SH10 ERROR
REJ_RSP 1 1 1 REJECT14 REJECT
UA_RSP 0 0 0 SH9 ERROR
UA_RSP 0 0 1 SH9 ERROR
UA_RSP 0 1 0 SH9 ERROR
UA_RSP 0 1 1 SH9 ERROR
UA_RSP 1 0 0 SH9 ERROR
UA_RSP 1 0 1 SH9 ERROR
UA_RSP 1 1 0 SH9 ERROR
UA_RSP 1 1 1 SH9 ERROR
DM_RSP 0 0 0 SH6 ADM
DM_RSP 0 0 1 SH6 ADM
DM_RSP 0 1 0 SH6 ADM
DM_RSP 0 1 1 SH6 ADM
DM_RSP 1 0 0 SH6 ADM
DM_RSP 1 0 1 SH6 ADM
DM_RSP 1 1 0 SH6 ADM
DM_RSP 1 1 1 SH6 ADM
FRMR_RSP 0 0 0 SH5 RESET_WAIT
FRMR_RSP 0 0 1 SH5 RESET_WAIT
FRMR_RSP 0 1 0 SH5 RESET_WAIT
FRMR_RSP 0 1 1 SH5 RESET_WAIT
FRMR_RSP 1 0 0 SH5 RESET_WAIT
FRMR_RSP 1 0 1 SH5 RESET_WAIT
FRMR_RSP 1 1 0 SH5 RESET_WAIT
FRMR_RSP 1 1 1 SH5 RESET_WAIT
BAD_FRAME 0 0 0 SH7 ERROR
BAD_FRAME 0 0 1 SH7 ERROR
BAD_FRAME 0 1 0 SH7 ERROR
BAD_FRAME 0 1 1 SH7 ERROR
BAD_FRAME 1 0 0 SH7 ERROR
BAD_FRAME 1 0 1 SH7 ERROR
BAD_FRAME 1 1 0 SH7 ERROR
BAD_FRAME 1 1 1 SH7 ERROR
;
;112 entries in table, 8 modified by tredit4 SABME_CMD x x x SH3 RESET_CHECK
;112 entries in table, 8 modified by tredit4 DISC_CMD x x x SH4 ADM
;112 entries in table, 8 modified by tredit4 FRMR_RSP x x x SH5 RESET_WAIT
;112 entries in table, 8 modified by tredit4 DM_RSP x x x SH6 ADM
;112 entries in table, 8 modified by tredit4 BAD_FRAME x x x SH7 ERROR
;112 entries in table, 8 modified by tredit4 UA_RSP x x x SH9 ERROR
;112 entries in table, 8 modified by tredit4 anyrsp x 1 0 SH10 ERROR
;112 entries in table, 2 modified by tredit4 I_CMD 1 0 x REJECT5 REJECT
;112 entries in table, 2 modified by tredit4 I_RSP 1 0 x REJECT5 REJECT
;112 entries in table, 1 modified by tredit4 I_RSP 1 1 1 REJECT5 REJECT
;112 entries in table, 2 modified by tredit4 I_CMD 1 1 x REJECT6 REJECT
;112 entries in table, 1 modified by tredit4 I_RSP x 1 1 REJECT7 REJECT
;112 entries in table, 1 modified by tredit4 I_RSP x 0 0 REJECT7 REJECT
;112 entries in table, 1 modified by tredit4 I_CMD x 0 0 REJECT7 REJECT
;112 entries in table, 1 modified by tredit4 I_RSP x 0 1 REJECT8 REJECT
;112 entries in table, 1 modified by tredit4 I_CMD x 0 1 REJECT8 REJECT
;112 entries in table, 2 modified by tredit4 I_CMD x 1 x REJECT9 REJECT
;112 entries in table, 4 modified by tredit4 RR_CMD x 0 x REJECT10 REJECT
;112 entries in table, 4 modified by tredit4 RR_RSP x 0 x REJECT10 REJECT
;112 entries in table, 2 modified by tredit4 RR_RSP x 1 1 REJECT10 REJECT
;112 entries in table, 4 modified by tredit4 RR_CMD x 1 x REJECT11 REJECT
;112 entries in table, 4 modified by tredit4 RNR_CMD x 0 x REJECT12 REJECT
;112 entries in table, 4 modified by tredit4 RNR_RSP x 0 x REJECT12 REJECT
;112 entries in table, 2 modified by tredit4 RNR_RSP x 1 1 REJECT12 REJECT
;112 entries in table, 4 modified by tredit4 RNR_CMD x 1 x REJECT13 REJECT
;112 entries in table, 2 modified by tredit4 REJ_CMD x 0 0 REJECT14 REJECT
;112 entries in table, 2 modified by tredit4 REJ_RSP x 0 0 REJECT14 REJECT
;112 entries in table, 2 modified by tredit4 REJ_RSP x 1 1 REJECT14 REJECT
;112 entries in table, 2 modified by tredit4 REJ_CMD x 0 1 REJECT15 REJECT
;112 entries in table, 2 modified by tredit4 REJ_RSP x 0 1 REJECT15 REJECT
;112 entries in table, 4 modified by tredit4 REJ_CMD x 1 x REJECT16 REJECT
;
TABLE AWAIT
;Transition table for the AWAIT state:
;
;frame type uexpect p bit p_flag
;received N(S) in frame
;
I_CMD 0 0 0 AWAIT6 AWAIT
I_CMD 0 0 1 AWAIT6 AWAIT
I_CMD 0 1 0 AWAIT7 AWAIT
I_CMD 0 1 1 AWAIT7 AWAIT
I_CMD 1 0 0 AWAIT3 AWAIT_REJECT
I_CMD 1 0 1 AWAIT3 AWAIT_REJECT
I_CMD 1 1 0 AWAIT4 AWAIT_REJECT
I_CMD 1 1 1 AWAIT4 AWAIT_REJECT
RR_CMD 0 0 0 AWAIT9 AWAIT
RR_CMD 0 0 1 AWAIT9 AWAIT
RR_CMD 0 1 0 AWAIT10 AWAIT
RR_CMD 0 1 1 AWAIT10 AWAIT
RR_CMD 1 0 0 AWAIT9 AWAIT
RR_CMD 1 0 1 AWAIT9 AWAIT
RR_CMD 1 1 0 AWAIT10 AWAIT
RR_CMD 1 1 1 AWAIT10 AWAIT
RNR_CMD 0 0 0 AWAIT12 AWAIT
RNR_CMD 0 0 1 AWAIT12 AWAIT
RNR_CMD 0 1 0 AWAIT13 AWAIT
RNR_CMD 0 1 1 AWAIT13 AWAIT
RNR_CMD 1 0 0 AWAIT12 AWAIT
RNR_CMD 1 0 1 AWAIT12 AWAIT
RNR_CMD 1 1 0 AWAIT13 AWAIT
RNR_CMD 1 1 1 AWAIT13 AWAIT
REJ_CMD 0 0 0 AWAIT9 AWAIT
REJ_CMD 0 0 1 AWAIT9 AWAIT
REJ_CMD 0 1 0 AWAIT10 AWAIT
REJ_CMD 0 1 1 AWAIT10 AWAIT
REJ_CMD 1 0 0 AWAIT9 AWAIT
REJ_CMD 1 0 1 AWAIT9 AWAIT
REJ_CMD 1 1 0 AWAIT10 AWAIT
REJ_CMD 1 1 1 AWAIT10 AWAIT
DISC_CMD 0 0 0 SH4 ADM
DISC_CMD 0 0 1 SH4 ADM
DISC_CMD 0 1 0 SH4 ADM
DISC_CMD 0 1 1 SH4 ADM
DISC_CMD 1 0 0 SH4 ADM
DISC_CMD 1 0 1 SH4 ADM
DISC_CMD 1 1 0 SH4 ADM
DISC_CMD 1 1 1 SH4 ADM
SABME_CMD 0 0 0 SH3 RESET_CHECK
SABME_CMD 0 0 1 SH3 RESET_CHECK
SABME_CMD 0 1 0 SH3 RESET_CHECK
SABME_CMD 0 1 1 SH3 RESET_CHECK
SABME_CMD 1 0 0 SH3 RESET_CHECK
SABME_CMD 1 0 1 SH3 RESET_CHECK
SABME_CMD 1 1 0 SH3 RESET_CHECK
SABME_CMD 1 1 1 SH3 RESET_CHECK
I_RSP 0 0 0 AWAIT6 AWAIT
I_RSP 0 0 1 AWAIT6 AWAIT
I_RSP 0 1 0 SH10 ERROR
I_RSP 0 1 1 AWAIT5 NORMAL
I_RSP 1 0 0 AWAIT3 AWAIT_REJECT
I_RSP 1 0 1 AWAIT3 AWAIT_REJECT
I_RSP 1 1 0 SH10 ERROR
I_RSP 1 1 1 AWAIT2 REJECT
RR_RSP 0 0 0 AWAIT9 AWAIT
RR_RSP 0 0 1 AWAIT9 AWAIT
RR_RSP 0 1 0 SH10 ERROR
RR_RSP 0 1 1 AWAIT8 AWAIT
RR_RSP 1 0 0 AWAIT9 AWAIT
RR_RSP 1 0 1 AWAIT9 AWAIT
RR_RSP 1 1 0 SH10 ERROR
RR_RSP 1 1 1 AWAIT8 AWAIT
RNR_RSP 0 0 0 AWAIT12 AWAIT
RNR_RSP 0 0 1 AWAIT12 AWAIT
RNR_RSP 0 1 0 SH10 ERROR
RNR_RSP 0 1 1 AWAIT11 AWAIT
RNR_RSP 1 0 0 AWAIT12 AWAIT
RNR_RSP 1 0 1 AWAIT12 AWAIT
RNR_RSP 1 1 0 SH10 ERROR
RNR_RSP 1 1 1 AWAIT11 AWAIT
REJ_RSP 0 0 0 AWAIT9 AWAIT
REJ_RSP 0 0 1 AWAIT9 AWAIT
REJ_RSP 0 1 0 SH10 ERROR
REJ_RSP 0 1 1 AWAIT8 AWAIT
REJ_RSP 1 0 0 AWAIT9 AWAIT
REJ_RSP 1 0 1 AWAIT9 AWAIT
REJ_RSP 1 1 0 SH10 ERROR
REJ_RSP 1 1 1 AWAIT8 AWAIT
UA_RSP 0 0 0 SH9 ERROR
UA_RSP 0 0 1 SH9 ERROR
UA_RSP 0 1 0 SH9 ERROR
UA_RSP 0 1 1 SH9 ERROR
UA_RSP 1 0 0 SH9 ERROR
UA_RSP 1 0 1 SH9 ERROR
UA_RSP 1 1 0 SH9 ERROR
UA_RSP 1 1 1 SH9 ERROR
DM_RSP 0 0 0 SH6 ADM
DM_RSP 0 0 1 SH6 ADM
DM_RSP 0 1 0 SH6 ADM
DM_RSP 0 1 1 SH6 ADM
DM_RSP 1 0 0 SH6 ADM
DM_RSP 1 0 1 SH6 ADM
DM_RSP 1 1 0 SH6 ADM
DM_RSP 1 1 1 SH6 ADM
FRMR_RSP 0 0 0 SH5 RESET_WAIT
FRMR_RSP 0 0 1 SH5 RESET_WAIT
FRMR_RSP 0 1 0 SH5 RESET_WAIT
FRMR_RSP 0 1 1 SH5 RESET_WAIT
FRMR_RSP 1 0 0 SH5 RESET_WAIT
FRMR_RSP 1 0 1 SH5 RESET_WAIT
FRMR_RSP 1 1 0 SH5 RESET_WAIT
FRMR_RSP 1 1 1 SH5 RESET_WAIT
BAD_FRAME 0 0 0 SH7 ERROR
BAD_FRAME 0 0 1 SH7 ERROR
BAD_FRAME 0 1 0 SH7 ERROR
BAD_FRAME 0 1 1 SH7 ERROR
BAD_FRAME 1 0 0 SH7 ERROR
BAD_FRAME 1 0 1 SH7 ERROR
BAD_FRAME 1 1 0 SH7 ERROR
BAD_FRAME 1 1 1 SH7 ERROR
;
;112 entries in table, 8 modified by tredit4 SABME_CMD x x x SH3 RESET_CHECK
;112 entries in table, 8 modified by tredit4 DISC_CMD x x x SH4 ADM
;112 entries in table, 8 modified by tredit4 FRMR_RSP x x x SH5 RESET_WAIT
;112 entries in table, 8 modified by tredit4 DM_RSP x x x SH6 ADM
;112 entries in table, 8 modified by tredit4 BAD_FRAME x x x SH7 ERROR
;112 entries in table, 8 modified by tredit4 UA_RSP x x x SH9 ERROR
;112 entries in table, 8 modified by tredit4 anyrsp x 1 0 SH10 ERROR
;112 entries in table, 1 modified by tredit4 I_RSP 1 1 x AWAIT2 REJECT
;112 entries in table, 2 modified by tredit4 I_CMD 1 0 x AWAIT3 AWAIT_REJECT
;112 entries in table, 2 modified by tredit4 I_RSP 1 0 x AWAIT3 AWAIT_REJECT
;112 entries in table, 2 modified by tredit4 I_CMD 1 1 x AWAIT4 AWAIT_REJECT
;112 entries in table, 1 modified by tredit4 I_RSP x 1 x AWAIT5 NORMAL
;112 entries in table, 2 modified by tredit4 I_RSP x 0 x AWAIT6 AWAIT
;112 entries in table, 2 modified by tredit4 I_CMD x 0 x AWAIT6 AWAIT
;112 entries in table, 2 modified by tredit4 I_CMD x 1 x AWAIT7 AWAIT
;112 entries in table, 2 modified by tredit4 RR_RSP x 1 x AWAIT8 AWAIT
;112 entries in table, 2 modified by tredit4 REJ_RSP x 1 x AWAIT8 AWAIT
;112 entries in table, 4 modified by tredit4 RR_CMD x 0 x AWAIT9 AWAIT
;112 entries in table, 4 modified by tredit4 RR_RSP x 0 x AWAIT9 AWAIT
;112 entries in table, 4 modified by tredit4 REJ_CMD x 0 x AWAIT9 AWAIT
;112 entries in table, 4 modified by tredit4 REJ_RSP x 0 x AWAIT9 AWAIT
;112 entries in table, 4 modified by tredit4 RR_CMD x 1 x AWAIT10 AWAIT
;112 entries in table, 4 modified by tredit4 REJ_CMD x 1 x AWAIT10 AWAIT
;112 entries in table, 2 modified by tredit4 RNR_RSP x 1 x AWAIT11 AWAIT
;112 entries in table, 4 modified by tredit4 RNR_CMD x 0 x AWAIT12 AWAIT
;112 entries in table, 4 modified by tredit4 RNR_RSP x 0 x AWAIT12 AWAIT
;112 entries in table, 4 modified by tredit4 RNR_CMD x 1 x AWAIT13 AWAIT
;
TABLE AWAIT_BUSY
;Transition table for the AWAIT_BUSY state:
;
;frame type uexpect p bit p_flag
;received N(S) in frame
;
I_CMD 0 0 0 AWAIT_BUSY8 AWAIT_BUSY
I_CMD 0 0 1 AWAIT_BUSY8 AWAIT_BUSY
I_CMD 0 1 0 AWAIT_BUSY9 AWAIT_BUSY
I_CMD 0 1 1 AWAIT_BUSY9 AWAIT_BUSY
I_CMD 1 0 0 AWAIT_BUSY5 AWAIT_BUSY
I_CMD 1 0 1 AWAIT_BUSY5 AWAIT_BUSY
I_CMD 1 1 0 AWAIT_BUSY6 AWAIT_BUSY
I_CMD 1 1 1 AWAIT_BUSY6 AWAIT_BUSY
RR_CMD 0 0 0 AWAIT_BUSY11 AWAIT_BUSY
RR_CMD 0 0 1 AWAIT_BUSY11 AWAIT_BUSY
RR_CMD 0 1 0 AWAIT_BUSY12 AWAIT_BUSY
RR_CMD 0 1 1 AWAIT_BUSY12 AWAIT_BUSY
RR_CMD 1 0 0 AWAIT_BUSY11 AWAIT_BUSY
RR_CMD 1 0 1 AWAIT_BUSY11 AWAIT_BUSY
RR_CMD 1 1 0 AWAIT_BUSY12 AWAIT_BUSY
RR_CMD 1 1 1 AWAIT_BUSY12 AWAIT_BUSY
RNR_CMD 0 0 0 AWAIT_BUSY14 AWAIT_BUSY
RNR_CMD 0 0 1 AWAIT_BUSY14 AWAIT_BUSY
RNR_CMD 0 1 0 AWAIT_BUSY15 AWAIT_BUSY
RNR_CMD 0 1 1 AWAIT_BUSY15 AWAIT_BUSY
RNR_CMD 1 0 0 AWAIT_BUSY14 AWAIT_BUSY
RNR_CMD 1 0 1 AWAIT_BUSY14 AWAIT_BUSY
RNR_CMD 1 1 0 AWAIT_BUSY15 AWAIT_BUSY
RNR_CMD 1 1 1 AWAIT_BUSY15 AWAIT_BUSY
REJ_CMD 0 0 0 AWAIT_BUSY11 AWAIT_BUSY
REJ_CMD 0 0 1 AWAIT_BUSY11 AWAIT_BUSY
REJ_CMD 0 1 0 AWAIT_BUSY12 AWAIT_BUSY
REJ_CMD 0 1 1 AWAIT_BUSY12 AWAIT_BUSY
REJ_CMD 1 0 0 AWAIT_BUSY11 AWAIT_BUSY
REJ_CMD 1 0 1 AWAIT_BUSY11 AWAIT_BUSY
REJ_CMD 1 1 0 AWAIT_BUSY12 AWAIT_BUSY
REJ_CMD 1 1 1 AWAIT_BUSY12 AWAIT_BUSY
DISC_CMD 0 0 0 SH4 ADM
DISC_CMD 0 0 1 SH4 ADM
DISC_CMD 0 1 0 SH4 ADM
DISC_CMD 0 1 1 SH4 ADM
DISC_CMD 1 0 0 SH4 ADM
DISC_CMD 1 0 1 SH4 ADM
DISC_CMD 1 1 0 SH4 ADM
DISC_CMD 1 1 1 SH4 ADM
SABME_CMD 0 0 0 SH3 RESET_CHECK
SABME_CMD 0 0 1 SH3 RESET_CHECK
SABME_CMD 0 1 0 SH3 RESET_CHECK
SABME_CMD 0 1 1 SH3 RESET_CHECK
SABME_CMD 1 0 0 SH3 RESET_CHECK
SABME_CMD 1 0 1 SH3 RESET_CHECK
SABME_CMD 1 1 0 SH3 RESET_CHECK
SABME_CMD 1 1 1 SH3 RESET_CHECK
I_RSP 0 0 0 AWAIT_BUSY8 AWAIT_BUSY
I_RSP 0 0 1 AWAIT_BUSY8 AWAIT_BUSY
I_RSP 0 1 0 SH10 ERROR
I_RSP 0 1 1 AWAIT_BUSY7 BUSY
I_RSP 1 0 0 AWAIT_BUSY5 AWAIT_BUSY
I_RSP 1 0 1 AWAIT_BUSY5 AWAIT_BUSY
I_RSP 1 1 0 SH10 ERROR
I_RSP 1 1 1 AWAIT_BUSY4 BUSY
RR_RSP 0 0 0 AWAIT_BUSY11 AWAIT_BUSY
RR_RSP 0 0 1 AWAIT_BUSY11 AWAIT_BUSY
RR_RSP 0 1 0 SH10 ERROR
RR_RSP 0 1 1 AWAIT_BUSY10 BUSY
RR_RSP 1 0 0 AWAIT_BUSY11 AWAIT_BUSY
RR_RSP 1 0 1 AWAIT_BUSY11 AWAIT_BUSY
RR_RSP 1 1 0 SH10 ERROR
RR_RSP 1 1 1 AWAIT_BUSY10 BUSY
RNR_RSP 0 0 0 AWAIT_BUSY14 AWAIT_BUSY
RNR_RSP 0 0 1 AWAIT_BUSY14 AWAIT_BUSY
RNR_RSP 0 1 0 SH10 ERROR
RNR_RSP 0 1 1 AWAIT_BUSY13 BUSY
RNR_RSP 1 0 0 AWAIT_BUSY14 AWAIT_BUSY
RNR_RSP 1 0 1 AWAIT_BUSY14 AWAIT_BUSY
RNR_RSP 1 1 0 SH10 ERROR
RNR_RSP 1 1 1 AWAIT_BUSY13 BUSY
REJ_RSP 0 0 0 AWAIT_BUSY11 AWAIT_BUSY
REJ_RSP 0 0 1 AWAIT_BUSY11 AWAIT_BUSY
REJ_RSP 0 1 0 SH10 ERROR
REJ_RSP 0 1 1 AWAIT_BUSY10 BUSY
REJ_RSP 1 0 0 AWAIT_BUSY11 AWAIT_BUSY
REJ_RSP 1 0 1 AWAIT_BUSY11 AWAIT_BUSY
REJ_RSP 1 1 0 SH10 ERROR
REJ_RSP 1 1 1 AWAIT_BUSY10 BUSY
UA_RSP 0 0 0 SH9 ERROR
UA_RSP 0 0 1 SH9 ERROR
UA_RSP 0 1 0 SH9 ERROR
UA_RSP 0 1 1 SH9 ERROR
UA_RSP 1 0 0 SH9 ERROR
UA_RSP 1 0 1 SH9 ERROR
UA_RSP 1 1 0 SH9 ERROR
UA_RSP 1 1 1 SH9 ERROR
DM_RSP 0 0 0 SH6 ADM
DM_RSP 0 0 1 SH6 ADM
DM_RSP 0 1 0 SH6 ADM
DM_RSP 0 1 1 SH6 ADM
DM_RSP 1 0 0 SH6 ADM
DM_RSP 1 0 1 SH6 ADM
DM_RSP 1 1 0 SH6 ADM
DM_RSP 1 1 1 SH6 ADM
FRMR_RSP 0 0 0 SH5 RESET_WAIT
FRMR_RSP 0 0 1 SH5 RESET_WAIT
FRMR_RSP 0 1 0 SH5 RESET_WAIT
FRMR_RSP 0 1 1 SH5 RESET_WAIT
FRMR_RSP 1 0 0 SH5 RESET_WAIT
FRMR_RSP 1 0 1 SH5 RESET_WAIT
FRMR_RSP 1 1 0 SH5 RESET_WAIT
FRMR_RSP 1 1 1 SH5 RESET_WAIT
BAD_FRAME 0 0 0 SH7 ERROR
BAD_FRAME 0 0 1 SH7 ERROR
BAD_FRAME 0 1 0 SH7 ERROR
BAD_FRAME 0 1 1 SH7 ERROR
BAD_FRAME 1 0 0 SH7 ERROR
BAD_FRAME 1 0 1 SH7 ERROR
BAD_FRAME 1 1 0 SH7 ERROR
BAD_FRAME 1 1 1 SH7 ERROR
;
;112 entries in table, 8 modified by tredit4 SABME_CMD x x x SH3 RESET_CHECK
;112 entries in table, 8 modified by tredit4 DISC_CMD x x x SH4 ADM
;112 entries in table, 8 modified by tredit4 FRMR_RSP x x x SH5 RESET_WAIT
;112 entries in table, 8 modified by tredit4 DM_RSP x x x SH6 ADM
;112 entries in table, 8 modified by tredit4 BAD_FRAME x x x SH7 ERROR
;112 entries in table, 8 modified by tredit4 UA_RSP x x x SH9 ERROR
;112 entries in table, 8 modified by tredit4 anyrsp x 1 0 SH10 ERROR
;112 entries in table, 1 modified by tredit4 I_RSP 1 1 x AWAIT_BUSY4 BUSY
;112 entries in table, 2 modified by tredit4 I_CMD 1 0 x AWAIT_BUSY5 AWAIT_BUSY
;112 entries in table, 2 modified by tredit4 I_RSP 1 0 x AWAIT_BUSY5 AWAIT_BUSY
;112 entries in table, 2 modified by tredit4 I_CMD 1 1 x AWAIT_BUSY6 AWAIT_BUSY
;112 entries in table, 1 modified by tredit4 I_RSP x 1 x AWAIT_BUSY7 BUSY
;112 entries in table, 2 modified by tredit4 I_RSP x 0 x AWAIT_BUSY8 AWAIT_BUSY
;112 entries in table, 2 modified by tredit4 I_CMD x 0 x AWAIT_BUSY8 AWAIT_BUSY
;112 entries in table, 2 modified by tredit4 I_CMD x 1 x AWAIT_BUSY9 AWAIT_BUSY
;112 entries in table, 2 modified by tredit4 RR_RSP x 1 x AWAIT_BUSY10 BUSY
;112 entries in table, 2 modified by tredit4 REJ_RSP x 1 x AWAIT_BUSY10 BUSY
;112 entries in table, 4 modified by tredit4 RR_CMD x 0 x AWAIT_BUSY11 AWAIT_BUSY
;112 entries in table, 4 modified by tredit4 RR_RSP x 0 x AWAIT_BUSY11 AWAIT_BUSY
;112 entries in table, 4 modified by tredit4 REJ_CMD x 0 x AWAIT_BUSY11 AWAIT_BUSY
;112 entries in table, 4 modified by tredit4 REJ_RSP x 0 x AWAIT_BUSY11 AWAIT_BUSY
;112 entries in table, 4 modified by tredit4 RR_CMD x 1 x AWAIT_BUSY12 AWAIT_BUSY
;112 entries in table, 4 modified by tredit4 REJ_CMD x 1 x AWAIT_BUSY12 AWAIT_BUSY
;112 entries in table, 2 modified by tredit4 RNR_RSP x 1 x AWAIT_BUSY13 BUSY
;112 entries in table, 4 modified by tredit4 RNR_CMD x 0 x AWAIT_BUSY14 AWAIT_BUSY
;112 entries in table, 4 modified by tredit4 RNR_RSP x 0 x AWAIT_BUSY14 AWAIT_BUSY
;112 entries in table, 4 modified by tredit4 RNR_CMD x 1 x AWAIT_BUSY15 AWAIT_BUSY
;
TABLE AWAIT_REJECT
;Transition table for the AWAIT_REJECT state:
;
;frame type uexpect p bit p_flag
;received N(S) in frame
;
I_CMD 0 0 0 AWAIT_REJECT5 AWAIT
I_CMD 0 0 1 AWAIT_REJECT5 AWAIT
I_CMD 0 1 0 AWAIT_REJECT6 AWAIT
I_CMD 0 1 1 AWAIT_REJECT6 AWAIT
I_CMD 1 0 0 AWAIT_REJECT2 AWAIT_REJECT
I_CMD 1 0 1 AWAIT_REJECT2 AWAIT_REJECT
I_CMD 1 1 0 AWAIT_REJECT3 AWAIT_REJECT
I_CMD 1 1 1 AWAIT_REJECT3 AWAIT_REJECT
RR_CMD 0 0 0 AWAIT_REJECT8 AWAIT_REJECT
RR_CMD 0 0 1 AWAIT_REJECT8 AWAIT_REJECT
RR_CMD 0 1 0 AWAIT_REJECT9 AWAIT_REJECT
RR_CMD 0 1 1 AWAIT_REJECT9 AWAIT_REJECT
RR_CMD 1 0 0 AWAIT_REJECT8 AWAIT_REJECT
RR_CMD 1 0 1 AWAIT_REJECT8 AWAIT_REJECT
RR_CMD 1 1 0 AWAIT_REJECT9 AWAIT_REJECT
RR_CMD 1 1 1 AWAIT_REJECT9 AWAIT_REJECT
RNR_CMD 0 0 0 AWAIT_REJECT11 AWAIT_REJECT
RNR_CMD 0 0 1 AWAIT_REJECT11 AWAIT_REJECT
RNR_CMD 0 1 0 AWAIT_REJECT12 AWAIT_REJECT
RNR_CMD 0 1 1 AWAIT_REJECT12 AWAIT_REJECT
RNR_CMD 1 0 0 AWAIT_REJECT11 AWAIT_REJECT
RNR_CMD 1 0 1 AWAIT_REJECT11 AWAIT_REJECT
RNR_CMD 1 1 0 AWAIT_REJECT12 AWAIT_REJECT
RNR_CMD 1 1 1 AWAIT_REJECT12 AWAIT_REJECT
REJ_CMD 0 0 0 AWAIT_REJECT8 AWAIT_REJECT
REJ_CMD 0 0 1 AWAIT_REJECT8 AWAIT_REJECT
REJ_CMD 0 1 0 AWAIT_REJECT9 AWAIT_REJECT
REJ_CMD 0 1 1 AWAIT_REJECT9 AWAIT_REJECT
REJ_CMD 1 0 0 AWAIT_REJECT8 AWAIT_REJECT
REJ_CMD 1 0 1 AWAIT_REJECT8 AWAIT_REJECT
REJ_CMD 1 1 0 AWAIT_REJECT9 AWAIT_REJECT
REJ_CMD 1 1 1 AWAIT_REJECT9 AWAIT_REJECT
DISC_CMD 0 0 0 SH4 ADM
DISC_CMD 0 0 1 SH4 ADM
DISC_CMD 0 1 0 SH4 ADM
DISC_CMD 0 1 1 SH4 ADM
DISC_CMD 1 0 0 SH4 ADM
DISC_CMD 1 0 1 SH4 ADM
DISC_CMD 1 1 0 SH4 ADM
DISC_CMD 1 1 1 SH4 ADM
SABME_CMD 0 0 0 SH3 RESET_CHECK
SABME_CMD 0 0 1 SH3 RESET_CHECK
SABME_CMD 0 1 0 SH3 RESET_CHECK
SABME_CMD 0 1 1 SH3 RESET_CHECK
SABME_CMD 1 0 0 SH3 RESET_CHECK
SABME_CMD 1 0 1 SH3 RESET_CHECK
SABME_CMD 1 1 0 SH3 RESET_CHECK
SABME_CMD 1 1 1 SH3 RESET_CHECK
I_RSP 0 0 0 AWAIT_REJECT5 AWAIT
I_RSP 0 0 1 AWAIT_REJECT5 AWAIT
I_RSP 0 1 0 SH10 ERROR
I_RSP 0 1 1 AWAIT_REJECT4 NORMAL
I_RSP 1 0 0 AWAIT_REJECT2 AWAIT_REJECT
I_RSP 1 0 1 AWAIT_REJECT2 AWAIT_REJECT
I_RSP 1 1 0 SH10 ERROR
I_RSP 1 1 1 AWAIT_REJECT4 NORMAL
RR_RSP 0 0 0 AWAIT_REJECT8 AWAIT_REJECT
RR_RSP 0 0 1 AWAIT_REJECT8 AWAIT_REJECT
RR_RSP 0 1 0 SH10 ERROR
RR_RSP 0 1 1 AWAIT_REJECT7 REJECT
RR_RSP 1 0 0 AWAIT_REJECT8 AWAIT_REJECT
RR_RSP 1 0 1 AWAIT_REJECT8 AWAIT_REJECT
RR_RSP 1 1 0 SH10 ERROR
RR_RSP 1 1 1 AWAIT_REJECT7 REJECT
RNR_RSP 0 0 0 AWAIT_REJECT11 AWAIT_REJECT
RNR_RSP 0 0 1 AWAIT_REJECT11 AWAIT_REJECT
RNR_RSP 0 1 0 SH10 ERROR
RNR_RSP 0 1 1 AWAIT_REJECT10 REJECT
RNR_RSP 1 0 0 AWAIT_REJECT11 AWAIT_REJECT
RNR_RSP 1 0 1 AWAIT_REJECT11 AWAIT_REJECT
RNR_RSP 1 1 0 SH10 ERROR
RNR_RSP 1 1 1 AWAIT_REJECT10 REJECT
REJ_RSP 0 0 0 AWAIT_REJECT8 AWAIT_REJECT
REJ_RSP 0 0 1 AWAIT_REJECT8 AWAIT_REJECT
REJ_RSP 0 1 0 SH10 ERROR
REJ_RSP 0 1 1 AWAIT_REJECT7 REJECT
REJ_RSP 1 0 0 AWAIT_REJECT8 AWAIT_REJECT
REJ_RSP 1 0 1 AWAIT_REJECT8 AWAIT_REJECT
REJ_RSP 1 1 0 SH10 ERROR
REJ_RSP 1 1 1 AWAIT_REJECT7 REJECT
UA_RSP 0 0 0 SH9 ERROR
UA_RSP 0 0 1 SH9 ERROR
UA_RSP 0 1 0 SH9 ERROR
UA_RSP 0 1 1 SH9 ERROR
UA_RSP 1 0 0 SH9 ERROR
UA_RSP 1 0 1 SH9 ERROR
UA_RSP 1 1 0 SH9 ERROR
UA_RSP 1 1 1 SH9 ERROR
DM_RSP 0 0 0 SH6 ADM
DM_RSP 0 0 1 SH6 ADM
DM_RSP 0 1 0 SH6 ADM
DM_RSP 0 1 1 SH6 ADM
DM_RSP 1 0 0 SH6 ADM
DM_RSP 1 0 1 SH6 ADM
DM_RSP 1 1 0 SH6 ADM
DM_RSP 1 1 1 SH6 ADM
FRMR_RSP 0 0 0 SH5 RESET_WAIT
FRMR_RSP 0 0 1 SH5 RESET_WAIT
FRMR_RSP 0 1 0 SH5 RESET_WAIT
FRMR_RSP 0 1 1 SH5 RESET_WAIT
FRMR_RSP 1 0 0 SH5 RESET_WAIT
FRMR_RSP 1 0 1 SH5 RESET_WAIT
FRMR_RSP 1 1 0 SH5 RESET_WAIT
FRMR_RSP 1 1 1 SH5 RESET_WAIT
BAD_FRAME 0 0 0 SH7 ERROR
BAD_FRAME 0 0 1 SH7 ERROR
BAD_FRAME 0 1 0 SH7 ERROR
BAD_FRAME 0 1 1 SH7 ERROR
BAD_FRAME 1 0 0 SH7 ERROR
BAD_FRAME 1 0 1 SH7 ERROR
BAD_FRAME 1 1 0 SH7 ERROR
BAD_FRAME 1 1 1 SH7 ERROR
;
;112 entries in table, 8 modified by tredit4 SABME_CMD x x x SH3 RESET_CHECK
;112 entries in table, 8 modified by tredit4 DISC_CMD x x x SH4 ADM
;112 entries in table, 8 modified by tredit4 FRMR_RSP x x x SH5 RESET_WAIT
;112 entries in table, 8 modified by tredit4 DM_RSP x x x SH6 ADM
;112 entries in table, 8 modified by tredit4 BAD_FRAME x x x SH7 ERROR
;112 entries in table, 8 modified by tredit4 UA_RSP x x x SH9 ERROR
;112 entries in table, 8 modified by tredit4 anyrsp x 1 0 SH10 ERROR
;112 entries in table, 2 modified by tredit4 I_CMD 1 0 x AWAIT_REJECT2 AWAIT_REJECT
;112 entries in table, 2 modified by tredit4 I_RSP 1 0 x AWAIT_REJECT2 AWAIT_REJECT
;112 entries in table, 2 modified by tredit4 I_CMD 1 1 x AWAIT_REJECT3 AWAIT_REJECT
;112 entries in table, 2 modified by tredit4 I_RSP x 1 x AWAIT_REJECT4 NORMAL
;112 entries in table, 2 modified by tredit4 I_RSP x 0 x AWAIT_REJECT5 AWAIT
;112 entries in table, 2 modified by tredit4 I_CMD x 0 x AWAIT_REJECT5 AWAIT
;112 entries in table, 2 modified by tredit4 I_CMD x 1 x AWAIT_REJECT6 AWAIT
;112 entries in table, 2 modified by tredit4 RR_RSP x 1 x AWAIT_REJECT7 REJECT
;112 entries in table, 2 modified by tredit4 REJ_RSP x 1 x AWAIT_REJECT7 REJECT
;112 entries in table, 0 modified by tredit4 I_RSP 1 1 x AWAIT_REJECT7 REJECT
;112 entries in table, 4 modified by tredit4 RR_CMD x 0 x AWAIT_REJECT8 AWAIT_REJECT
;112 entries in table, 4 modified by tredit4 RR_RSP x 0 x AWAIT_REJECT8 AWAIT_REJECT
;112 entries in table, 4 modified by tredit4 REJ_CMD x 0 x AWAIT_REJECT8 AWAIT_REJECT
;112 entries in table, 4 modified by tredit4 REJ_RSP x 0 x AWAIT_REJECT8 AWAIT_REJECT
;112 entries in table, 4 modified by tredit4 RR_CMD x 1 x AWAIT_REJECT9 AWAIT_REJECT
;112 entries in table, 4 modified by tredit4 REJ_CMD x 1 x AWAIT_REJECT9 AWAIT_REJECT
;112 entries in table, 2 modified by tredit4 RNR_RSP x 1 x AWAIT_REJECT10 REJECT
;112 entries in table, 4 modified by tredit4 RNR_CMD x 0 x AWAIT_REJECT11 AWAIT_REJECT
;112 entries in table, 4 modified by tredit4 RNR_RSP x 0 x AWAIT_REJECT11 AWAIT_REJECT
;112 entries in table, 4 modified by tredit4 RNR_CMD x 1 x AWAIT_REJECT12 AWAIT_REJECT
;112 entries in table, 0 modified by tredit4 RNR_CMD x 1 x AWAIT_REJECT15 AWAIT_BUSY
/transit/pdutr.h
0,0 → 1,309
 
/* this file was generated on Thu Jan 8 00:21:19 GMT 1998 */
 
/* index name #defines: */
 
#define ADM 0
#define CONN 1
#define RESET_WAIT 2
#define RESET_CHECK 3
#define SETUP 4
#define RESET 5
#define D_CONN 6
#define ERROR 7
#define NORMAL 8
#define BUSY 9
#define REJECT 10
#define AWAIT 11
#define AWAIT_BUSY 12
#define AWAIT_REJECT 13
 
 
/* size of transition table is 1684 bytes */
 
static short int pdutr_offset [ ] ={
0, 54, 82, 110, 138, 192, 246, 300, 328, 554,
780, 1006, 1232, 1458 };
 
static char pdutr_entry [ ] = {
ADM5 , ADM , ADM4 , ADM , ADM5 , ADM ,
ADM4 , ADM , ADM5 , ADM , ADM4 , ADM ,
ADM5 , ADM , ADM4 , ADM , ADM3 , ADM ,
ADM3 , ADM , ADM2 , CONN , ADM2 , CONN ,
ADM5 , ADM , ADM5 , ADM , ADM5 , ADM ,
ADM5 , ADM , ADM5 , ADM , ADM5 , ADM ,
ADM5 , ADM , ADM5 , ADM , ADM5 , ADM ,
ADM5 , ADM , ADM5 , ADM , ADM5 , ADM ,
ADM5 , ADM , ADM5 , ADM , ADM5 , ADM ,
CONN5 , CONN , CONN5 , CONN , CONN5 , CONN ,
CONN5 , CONN , CONN5 , CONN , CONN3 , CONN ,
CONN5 , CONN , CONN5 , CONN , CONN5 , CONN ,
CONN5 , CONN , CONN5 , CONN , CONN4 , ADM ,
CONN5 , CONN , CONN5 , CONN , RESWAIT8 , RESET_WAIT ,
RESWAIT8 , RESET_WAIT , RESWAIT8 , RESET_WAIT , RESWAIT8 , RESET_WAIT ,
RESWAIT7 , RESET_WAIT , RESWAIT6 , RESET_WAIT , RESWAIT8 , RESET_WAIT ,
RESWAIT8 , RESET_WAIT , RESWAIT8 , RESET_WAIT , RESWAIT8 , RESET_WAIT ,
RESWAIT8 , RESET_WAIT , RESWAIT5 , ADM , RESWAIT8 , RESET_WAIT ,
RESWAIT8 , RESET_WAIT , RESCHK6 , RESET_CHECK , RESCHK6 , RESET_CHECK ,
RESCHK6 , RESET_CHECK , RESCHK6 , RESET_CHECK , RESCHK5 , ADM ,
RESCHK4 , RESET_CHECK , RESCHK6 , RESET_CHECK , RESCHK6 , RESET_CHECK ,
RESCHK6 , RESET_CHECK , RESCHK6 , RESET_CHECK , RESCHK6 , RESET_CHECK ,
RESCHK3 , ADM , RESCHK6 , RESET_CHECK , RESCHK6 , RESET_CHECK ,
SETUP6 , SETUP , SETUP6 , SETUP , SETUP6 , SETUP ,
SETUP6 , SETUP , SETUP6 , SETUP , SETUP6 , SETUP ,
SETUP6 , SETUP , SETUP6 , SETUP , SETUP4 , ADM ,
SETUP4 , ADM , SETUP1 , SETUP , SETUP1 , SETUP ,
SETUP6 , SETUP , SETUP6 , SETUP , SETUP6 , SETUP ,
SETUP6 , SETUP , SETUP6 , SETUP , SETUP6 , SETUP ,
SETUP6 , SETUP , SETUP6 , SETUP , SETUP6 , SETUP ,
SETUP2 , NORMAL , SETUP5 , ADM , SETUP5 , ADM ,
SETUP6 , SETUP , SETUP6 , SETUP , SETUP6 , SETUP ,
RESET6 , RESET , RESET6 , RESET , RESET6 , RESET ,
RESET6 , RESET , RESET6 , RESET , RESET6 , RESET ,
RESET6 , RESET , RESET6 , RESET , RESET4 , ADM ,
RESET4 , ADM , RESET1 , RESET , RESET1 , RESET ,
RESET6 , RESET , RESET6 , RESET , RESET6 , RESET ,
RESET6 , RESET , RESET6 , RESET , RESET6 , RESET ,
RESET6 , RESET , RESET6 , RESET , RESET6 , RESET ,
RESET2 , NORMAL , RESET5 , ADM , RESET5 , ADM ,
RESET6 , RESET , RESET6 , RESET , RESET6 , RESET ,
D_CONN5 , D_CONN , D_CONN5 , D_CONN , D_CONN5 , D_CONN ,
D_CONN5 , D_CONN , D_CONN5 , D_CONN , D_CONN5 , D_CONN ,
D_CONN5 , D_CONN , D_CONN5 , D_CONN , D_CONN3 , D_CONN ,
D_CONN3 , D_CONN , D_CONN1 , ADM , D_CONN1 , ADM ,
D_CONN5 , D_CONN , D_CONN5 , D_CONN , D_CONN5 , D_CONN ,
D_CONN5 , D_CONN , D_CONN5 , D_CONN , D_CONN5 , D_CONN ,
D_CONN5 , D_CONN , D_CONN5 , D_CONN , D_CONN5 , D_CONN ,
D_CONN4 , ADM , D_CONN4 , ADM , D_CONN5 , ADM ,
D_CONN5 , D_CONN , D_CONN5 , D_CONN , D_CONN5 , D_CONN ,
ERR5 , ERROR , ERR5 , ERROR , ERR5 , ERROR ,
ERR5 , ERROR , ERR2 , ADM , ERR1 , RESET_CHECK ,
ERR6 , ERROR , ERR6 , ERROR , ERR6 , ERROR ,
ERR6 , ERROR , ERR6 , ERROR , ERR3 , ADM ,
ERR4 , RESET_WAIT , ERR4 , RESET_WAIT , NORMAL8B , NORMAL ,
NORMAL9 , NORMAL , NORMAL10 , NORMAL , NORMAL10 , NORMAL ,
NORMAL5 , REJECT , NORMAL6 , REJECT , NORMAL7 , REJECT ,
NORMAL7 , REJECT , NORMAL11 , NORMAL , NORMAL11 , NORMAL ,
NORMAL12 , NORMAL , NORMAL12 , NORMAL , NORMAL11 , NORMAL ,
NORMAL11 , NORMAL , NORMAL12 , NORMAL , NORMAL12 , NORMAL ,
NORMAL13 , NORMAL , NORMAL13 , NORMAL , NORMAL14 , NORMAL ,
NORMAL14 , NORMAL , NORMAL13 , NORMAL , NORMAL13 , NORMAL ,
NORMAL14 , NORMAL , NORMAL14 , NORMAL , NORMAL15 , NORMAL ,
NORMAL16 , NORMAL , NORMAL17 , NORMAL , NORMAL17 , NORMAL ,
NORMAL15 , NORMAL , NORMAL16 , NORMAL , NORMAL17 , NORMAL ,
NORMAL17 , NORMAL , SH4 , ADM , SH4 , ADM ,
SH4 , ADM , SH4 , ADM , SH4 , ADM ,
SH4 , ADM , SH4 , ADM , SH4 , ADM ,
SH3 , RESET_CHECK , SH3 , RESET_CHECK , SH3 , RESET_CHECK ,
SH3 , RESET_CHECK , SH3 , RESET_CHECK , SH3 , RESET_CHECK ,
SH3 , RESET_CHECK , SH3 , RESET_CHECK , NORMAL8B , NORMAL ,
NORMAL9 , NORMAL , SH10 , ERROR , NORMAL8A , NORMAL ,
NORMAL5 , REJECT , NORMAL6 , REJECT , SH10 , ERROR ,
NORMAL5 , REJECT , NORMAL11 , NORMAL , NORMAL11 , NORMAL ,
SH10 , ERROR , NORMAL11 , NORMAL , NORMAL11 , NORMAL ,
NORMAL11 , NORMAL , SH10 , ERROR , NORMAL11 , NORMAL ,
NORMAL13 , NORMAL , NORMAL13 , NORMAL , SH10 , ERROR ,
NORMAL13 , NORMAL , NORMAL13 , NORMAL , NORMAL13 , NORMAL ,
SH10 , ERROR , NORMAL13 , NORMAL , NORMAL15 , NORMAL ,
NORMAL16 , NORMAL , SH10 , ERROR , NORMAL15 , NORMAL ,
NORMAL15 , NORMAL , NORMAL16 , NORMAL , SH10 , ERROR ,
NORMAL15 , NORMAL , SH9 , ERROR , SH9 , ERROR ,
SH9 , ERROR , SH9 , ERROR , SH9 , ERROR ,
SH9 , ERROR , SH9 , ERROR , SH9 , ERROR ,
SH6 , ADM , SH6 , ADM , SH6 , ADM ,
SH6 , ADM , SH6 , ADM , SH6 , ADM ,
SH6 , ADM , SH6 , ADM , SH5 , RESET_WAIT ,
SH5 , RESET_WAIT , SH5 , RESET_WAIT , SH5 , RESET_WAIT ,
SH5 , RESET_WAIT , SH5 , RESET_WAIT , SH5 , RESET_WAIT ,
SH5 , RESET_WAIT , SH7 , ERROR , SH7 , ERROR ,
SH7 , ERROR , SH7 , ERROR , SH7 , ERROR ,
SH7 , ERROR , SH7 , ERROR , SH7 , ERROR ,
SH7 , ERROR , BUSY13 , BUSY , BUSY14 , BUSY ,
BUSY12 , BUSY , BUSY12 , BUSY , BUSY9 , BUSY ,
BUSY10 , BUSY , BUSY11 , BUSY , BUSY11 , BUSY ,
BUSY15 , BUSY , BUSY15 , BUSY , BUSY16 , BUSY ,
BUSY16 , BUSY , BUSY15 , BUSY , BUSY15 , BUSY ,
BUSY16 , BUSY , BUSY16 , BUSY , BUSY17 , BUSY ,
BUSY17 , BUSY , BUSY18 , BUSY , BUSY18 , BUSY ,
BUSY17 , BUSY , BUSY17 , BUSY , BUSY18 , BUSY ,
BUSY18 , BUSY , BUSY19 , BUSY , BUSY20 , BUSY ,
BUSY21 , BUSY , BUSY21 , BUSY , BUSY19 , BUSY ,
BUSY20 , BUSY , BUSY21 , BUSY , BUSY21 , BUSY ,
SH4 , ADM , SH4 , ADM , SH4 , ADM ,
SH4 , ADM , SH4 , ADM , SH4 , ADM ,
SH4 , ADM , SH4 , ADM , SH3 , RESET_CHECK ,
SH3 , RESET_CHECK , SH3 , RESET_CHECK , SH3 , RESET_CHECK ,
SH3 , RESET_CHECK , SH3 , RESET_CHECK , SH3 , RESET_CHECK ,
SH3 , RESET_CHECK , BUSY13 , BUSY , BUSY14 , BUSY ,
SH10 , ERROR , BUSY13 , BUSY , BUSY9 , BUSY ,
BUSY10 , BUSY , SH10 , ERROR , BUSY9 , BUSY ,
BUSY15 , BUSY , BUSY15 , BUSY , SH10 , ERROR ,
BUSY15 , BUSY , BUSY15 , BUSY , BUSY15 , BUSY ,
SH10 , ERROR , BUSY15 , BUSY , BUSY17 , BUSY ,
BUSY17 , BUSY , SH10 , ERROR , BUSY17 , BUSY ,
BUSY17 , BUSY , BUSY17 , BUSY , SH10 , ERROR ,
BUSY17 , BUSY , BUSY19 , BUSY , BUSY20 , BUSY ,
SH10 , ERROR , BUSY19 , BUSY , BUSY19 , BUSY ,
BUSY20 , BUSY , SH10 , ERROR , BUSY19 , BUSY ,
SH9 , ERROR , SH9 , ERROR , SH9 , ERROR ,
SH9 , ERROR , SH9 , ERROR , SH9 , ERROR ,
SH9 , ERROR , SH9 , ERROR , SH6 , ADM ,
SH6 , ADM , SH6 , ADM , SH6 , ADM ,
SH6 , ADM , SH6 , ADM , SH6 , ADM ,
SH6 , ADM , SH5 , RESET_WAIT , SH5 , RESET_WAIT ,
SH5 , RESET_WAIT , SH5 , RESET_WAIT , SH5 , RESET_WAIT ,
SH5 , RESET_WAIT , SH5 , RESET_WAIT , SH5 , RESET_WAIT ,
SH7 , ERROR , SH7 , ERROR , SH7 , ERROR ,
SH7 , ERROR , SH7 , ERROR , SH7 , ERROR ,
SH7 , ERROR , SH7 , ERROR , SH7 , ERROR ,
REJECT7 , REJECT , REJECT8 , REJECT , REJECT9 , REJECT ,
REJECT9 , REJECT , REJECT5 , REJECT , REJECT5 , REJECT ,
REJECT6 , REJECT , REJECT6 , REJECT , REJECT10 , REJECT ,
REJECT10 , REJECT , REJECT11 , REJECT , REJECT11 , REJECT ,
REJECT10 , REJECT , REJECT10 , REJECT , REJECT11 , REJECT ,
REJECT11 , REJECT , REJECT12 , REJECT , REJECT12 , REJECT ,
REJECT13 , REJECT , REJECT13 , REJECT , REJECT12 , REJECT ,
REJECT12 , REJECT , REJECT13 , REJECT , REJECT13 , REJECT ,
REJECT14 , REJECT , REJECT15 , REJECT , REJECT16 , REJECT ,
REJECT16 , REJECT , REJECT14 , REJECT , REJECT15 , REJECT ,
REJECT16 , REJECT , REJECT16 , REJECT , SH4 , ADM ,
SH4 , ADM , SH4 , ADM , SH4 , ADM ,
SH4 , ADM , SH4 , ADM , SH4 , ADM ,
SH4 , ADM , SH3 , RESET_CHECK , SH3 , RESET_CHECK ,
SH3 , RESET_CHECK , SH3 , RESET_CHECK , SH3 , RESET_CHECK ,
SH3 , RESET_CHECK , SH3 , RESET_CHECK , SH3 , RESET_CHECK ,
REJECT7 , REJECT , REJECT8 , REJECT , SH10 , ERROR ,
REJECT7 , REJECT , REJECT5 , REJECT , REJECT5 , REJECT ,
SH10 , ERROR , REJECT5 , REJECT , REJECT10 , REJECT ,
REJECT10 , REJECT , SH10 , ERROR , REJECT10 , REJECT ,
REJECT10 , REJECT , REJECT10 , REJECT , SH10 , ERROR ,
REJECT10 , REJECT , REJECT12 , REJECT , REJECT12 , REJECT ,
SH10 , ERROR , REJECT12 , REJECT , REJECT12 , REJECT ,
REJECT12 , REJECT , SH10 , ERROR , REJECT12 , REJECT ,
REJECT14 , REJECT , REJECT15 , REJECT , SH10 , ERROR ,
REJECT14 , REJECT , REJECT14 , REJECT , REJECT15 , REJECT ,
SH10 , ERROR , REJECT14 , REJECT , SH9 , ERROR ,
SH9 , ERROR , SH9 , ERROR , SH9 , ERROR ,
SH9 , ERROR , SH9 , ERROR , SH9 , ERROR ,
SH9 , ERROR , SH6 , ADM , SH6 , ADM ,
SH6 , ADM , SH6 , ADM , SH6 , ADM ,
SH6 , ADM , SH6 , ADM , SH6 , ADM ,
SH5 , RESET_WAIT , SH5 , RESET_WAIT , SH5 , RESET_WAIT ,
SH5 , RESET_WAIT , SH5 , RESET_WAIT , SH5 , RESET_WAIT ,
SH5 , RESET_WAIT , SH5 , RESET_WAIT , SH7 , ERROR ,
SH7 , ERROR , SH7 , ERROR , SH7 , ERROR ,
SH7 , ERROR , SH7 , ERROR , SH7 , ERROR ,
SH7 , ERROR , SH7 , ERROR , AWAIT6 , AWAIT ,
AWAIT6 , AWAIT , AWAIT7 , AWAIT , AWAIT7 , AWAIT ,
AWAIT3 , AWAIT_REJECT , AWAIT3 , AWAIT_REJECT , AWAIT4 , AWAIT_REJECT ,
AWAIT4 , AWAIT_REJECT , AWAIT9 , AWAIT , AWAIT9 , AWAIT ,
AWAIT10 , AWAIT , AWAIT10 , AWAIT , AWAIT9 , AWAIT ,
AWAIT9 , AWAIT , AWAIT10 , AWAIT , AWAIT10 , AWAIT ,
AWAIT12 , AWAIT , AWAIT12 , AWAIT , AWAIT13 , AWAIT ,
AWAIT13 , AWAIT , AWAIT12 , AWAIT , AWAIT12 , AWAIT ,
AWAIT13 , AWAIT , AWAIT13 , AWAIT , AWAIT9 , AWAIT ,
AWAIT9 , AWAIT , AWAIT10 , AWAIT , AWAIT10 , AWAIT ,
AWAIT9 , AWAIT , AWAIT9 , AWAIT , AWAIT10 , AWAIT ,
AWAIT10 , AWAIT , SH4 , ADM , SH4 , ADM ,
SH4 , ADM , SH4 , ADM , SH4 , ADM ,
SH4 , ADM , SH4 , ADM , SH4 , ADM ,
SH3 , RESET_CHECK , SH3 , RESET_CHECK , SH3 , RESET_CHECK ,
SH3 , RESET_CHECK , SH3 , RESET_CHECK , SH3 , RESET_CHECK ,
SH3 , RESET_CHECK , SH3 , RESET_CHECK , AWAIT6 , AWAIT ,
AWAIT6 , AWAIT , SH10 , ERROR , AWAIT5 , NORMAL ,
AWAIT3 , AWAIT_REJECT , AWAIT3 , AWAIT_REJECT , SH10 , ERROR ,
AWAIT2 , REJECT , AWAIT9 , AWAIT , AWAIT9 , AWAIT ,
SH10 , ERROR , AWAIT8 , AWAIT , AWAIT9 , AWAIT ,
AWAIT9 , AWAIT , SH10 , ERROR , AWAIT8 , AWAIT ,
AWAIT12 , AWAIT , AWAIT12 , AWAIT , SH10 , ERROR ,
AWAIT11 , AWAIT , AWAIT12 , AWAIT , AWAIT12 , AWAIT ,
SH10 , ERROR , AWAIT11 , AWAIT , AWAIT9 , AWAIT ,
AWAIT9 , AWAIT , SH10 , ERROR , AWAIT8 , AWAIT ,
AWAIT9 , AWAIT , AWAIT9 , AWAIT , SH10 , ERROR ,
AWAIT8 , AWAIT , SH9 , ERROR , SH9 , ERROR ,
SH9 , ERROR , SH9 , ERROR , SH9 , ERROR ,
SH9 , ERROR , SH9 , ERROR , SH9 , ERROR ,
SH6 , ADM , SH6 , ADM , SH6 , ADM ,
SH6 , ADM , SH6 , ADM , SH6 , ADM ,
SH6 , ADM , SH6 , ADM , SH5 , RESET_WAIT ,
SH5 , RESET_WAIT , SH5 , RESET_WAIT , SH5 , RESET_WAIT ,
SH5 , RESET_WAIT , SH5 , RESET_WAIT , SH5 , RESET_WAIT ,
SH5 , RESET_WAIT , SH7 , ERROR , SH7 , ERROR ,
SH7 , ERROR , SH7 , ERROR , SH7 , ERROR ,
SH7 , ERROR , SH7 , ERROR , SH7 , ERROR ,
SH7 , ERROR , AWAIT_BUSY8 , AWAIT_BUSY , AWAIT_BUSY8 , AWAIT_BUSY ,
AWAIT_BUSY9 , AWAIT_BUSY , AWAIT_BUSY9 , AWAIT_BUSY , AWAIT_BUSY5 , AWAIT_BUSY ,
AWAIT_BUSY5 , AWAIT_BUSY , AWAIT_BUSY6 , AWAIT_BUSY , AWAIT_BUSY6 , AWAIT_BUSY ,
AWAIT_BUSY11 , AWAIT_BUSY , AWAIT_BUSY11 , AWAIT_BUSY , AWAIT_BUSY12 , AWAIT_BUSY ,
AWAIT_BUSY12 , AWAIT_BUSY , AWAIT_BUSY11 , AWAIT_BUSY , AWAIT_BUSY11 , AWAIT_BUSY ,
AWAIT_BUSY12 , AWAIT_BUSY , AWAIT_BUSY12 , AWAIT_BUSY , AWAIT_BUSY14 , AWAIT_BUSY ,
AWAIT_BUSY14 , AWAIT_BUSY , AWAIT_BUSY15 , AWAIT_BUSY , AWAIT_BUSY15 , AWAIT_BUSY ,
AWAIT_BUSY14 , AWAIT_BUSY , AWAIT_BUSY14 , AWAIT_BUSY , AWAIT_BUSY15 , AWAIT_BUSY ,
AWAIT_BUSY15 , AWAIT_BUSY , AWAIT_BUSY11 , AWAIT_BUSY , AWAIT_BUSY11 , AWAIT_BUSY ,
AWAIT_BUSY12 , AWAIT_BUSY , AWAIT_BUSY12 , AWAIT_BUSY , AWAIT_BUSY11 , AWAIT_BUSY ,
AWAIT_BUSY11 , AWAIT_BUSY , AWAIT_BUSY12 , AWAIT_BUSY , AWAIT_BUSY12 , AWAIT_BUSY ,
SH4 , ADM , SH4 , ADM , SH4 , ADM ,
SH4 , ADM , SH4 , ADM , SH4 , ADM ,
SH4 , ADM , SH4 , ADM , SH3 , RESET_CHECK ,
SH3 , RESET_CHECK , SH3 , RESET_CHECK , SH3 , RESET_CHECK ,
SH3 , RESET_CHECK , SH3 , RESET_CHECK , SH3 , RESET_CHECK ,
SH3 , RESET_CHECK , AWAIT_BUSY8 , AWAIT_BUSY , AWAIT_BUSY8 , AWAIT_BUSY ,
SH10 , ERROR , AWAIT_BUSY7 , BUSY , AWAIT_BUSY5 , AWAIT_BUSY ,
AWAIT_BUSY5 , AWAIT_BUSY , SH10 , ERROR , AWAIT_BUSY4 , BUSY ,
AWAIT_BUSY11 , AWAIT_BUSY , AWAIT_BUSY11 , AWAIT_BUSY , SH10 , ERROR ,
AWAIT_BUSY10 , BUSY , AWAIT_BUSY11 , AWAIT_BUSY , AWAIT_BUSY11 , AWAIT_BUSY ,
SH10 , ERROR , AWAIT_BUSY10 , BUSY , AWAIT_BUSY14 , AWAIT_BUSY ,
AWAIT_BUSY14 , AWAIT_BUSY , SH10 , ERROR , AWAIT_BUSY13 , BUSY ,
AWAIT_BUSY14 , AWAIT_BUSY , AWAIT_BUSY14 , AWAIT_BUSY , SH10 , ERROR ,
AWAIT_BUSY13 , BUSY , AWAIT_BUSY11 , AWAIT_BUSY , AWAIT_BUSY11 , AWAIT_BUSY ,
SH10 , ERROR , AWAIT_BUSY10 , BUSY , AWAIT_BUSY11 , AWAIT_BUSY ,
AWAIT_BUSY11 , AWAIT_BUSY , SH10 , ERROR , AWAIT_BUSY10 , BUSY ,
SH9 , ERROR , SH9 , ERROR , SH9 , ERROR ,
SH9 , ERROR , SH9 , ERROR , SH9 , ERROR ,
SH9 , ERROR , SH9 , ERROR , SH6 , ADM ,
SH6 , ADM , SH6 , ADM , SH6 , ADM ,
SH6 , ADM , SH6 , ADM , SH6 , ADM ,
SH6 , ADM , SH5 , RESET_WAIT , SH5 , RESET_WAIT ,
SH5 , RESET_WAIT , SH5 , RESET_WAIT , SH5 , RESET_WAIT ,
SH5 , RESET_WAIT , SH5 , RESET_WAIT , SH5 , RESET_WAIT ,
SH7 , ERROR , SH7 , ERROR , SH7 , ERROR ,
SH7 , ERROR , SH7 , ERROR , SH7 , ERROR ,
SH7 , ERROR , SH7 , ERROR , SH7 , ERROR ,
AWAIT_REJECT5 , AWAIT , AWAIT_REJECT5 , AWAIT , AWAIT_REJECT6 , AWAIT ,
AWAIT_REJECT6 , AWAIT , AWAIT_REJECT2 , AWAIT_REJECT , AWAIT_REJECT2 , AWAIT_REJECT ,
AWAIT_REJECT3 , AWAIT_REJECT , AWAIT_REJECT3 , AWAIT_REJECT , AWAIT_REJECT8 , AWAIT_REJECT ,
AWAIT_REJECT8 , AWAIT_REJECT , AWAIT_REJECT9 , AWAIT_REJECT , AWAIT_REJECT9 , AWAIT_REJECT ,
AWAIT_REJECT8 , AWAIT_REJECT , AWAIT_REJECT8 , AWAIT_REJECT , AWAIT_REJECT9 , AWAIT_REJECT ,
AWAIT_REJECT9 , AWAIT_REJECT , AWAIT_REJECT11, AWAIT_REJECT , AWAIT_REJECT11, AWAIT_REJECT ,
AWAIT_REJECT12, AWAIT_REJECT , AWAIT_REJECT12, AWAIT_REJECT , AWAIT_REJECT11, AWAIT_REJECT ,
AWAIT_REJECT11, AWAIT_REJECT , AWAIT_REJECT12, AWAIT_REJECT , AWAIT_REJECT12, AWAIT_REJECT ,
AWAIT_REJECT8 , AWAIT_REJECT , AWAIT_REJECT8 , AWAIT_REJECT , AWAIT_REJECT9 , AWAIT_REJECT ,
AWAIT_REJECT9 , AWAIT_REJECT , AWAIT_REJECT8 , AWAIT_REJECT , AWAIT_REJECT8 , AWAIT_REJECT ,
AWAIT_REJECT9 , AWAIT_REJECT , AWAIT_REJECT9 , AWAIT_REJECT , SH4 , ADM ,
SH4 , ADM , SH4 , ADM , SH4 , ADM ,
SH4 , ADM , SH4 , ADM , SH4 , ADM ,
SH4 , ADM , SH3 , RESET_CHECK , SH3 , RESET_CHECK ,
SH3 , RESET_CHECK , SH3 , RESET_CHECK , SH3 , RESET_CHECK ,
SH3 , RESET_CHECK , SH3 , RESET_CHECK , SH3 , RESET_CHECK ,
AWAIT_REJECT5 , AWAIT , AWAIT_REJECT5 , AWAIT , SH10 , ERROR ,
AWAIT_REJECT4 , NORMAL , AWAIT_REJECT2 , AWAIT_REJECT , AWAIT_REJECT2 , AWAIT_REJECT ,
SH10 , ERROR , AWAIT_REJECT4 , NORMAL , AWAIT_REJECT8 , AWAIT_REJECT ,
AWAIT_REJECT8 , AWAIT_REJECT , SH10 , ERROR , AWAIT_REJECT7 , REJECT ,
AWAIT_REJECT8 , AWAIT_REJECT , AWAIT_REJECT8 , AWAIT_REJECT , SH10 , ERROR ,
AWAIT_REJECT7 , REJECT , AWAIT_REJECT11, AWAIT_REJECT , AWAIT_REJECT11, AWAIT_REJECT ,
SH10 , ERROR , AWAIT_REJECT10, REJECT , AWAIT_REJECT11, AWAIT_REJECT ,
AWAIT_REJECT11, AWAIT_REJECT , SH10 , ERROR , AWAIT_REJECT10, REJECT ,
AWAIT_REJECT8 , AWAIT_REJECT , AWAIT_REJECT8 , AWAIT_REJECT , SH10 , ERROR ,
AWAIT_REJECT7 , REJECT , AWAIT_REJECT8 , AWAIT_REJECT , AWAIT_REJECT8 , AWAIT_REJECT ,
SH10 , ERROR , AWAIT_REJECT7 , REJECT , SH9 , ERROR ,
SH9 , ERROR , SH9 , ERROR , SH9 , ERROR ,
SH9 , ERROR , SH9 , ERROR , SH9 , ERROR ,
SH9 , ERROR , SH6 , ADM , SH6 , ADM ,
SH6 , ADM , SH6 , ADM , SH6 , ADM ,
SH6 , ADM , SH6 , ADM , SH6 , ADM ,
SH5 , RESET_WAIT , SH5 , RESET_WAIT , SH5 , RESET_WAIT ,
SH5 , RESET_WAIT , SH5 , RESET_WAIT , SH5 , RESET_WAIT ,
SH5 , RESET_WAIT , SH5 , RESET_WAIT , SH7 , ERROR ,
SH7 , ERROR , SH7 , ERROR , SH7 , ERROR ,
SH7 , ERROR , SH7 , ERROR , SH7 , ERROR ,
SH7 , ERROR , SH7 , ERROR };
/transit/compile.awk
0,0 → 1,81
# to run: awk -f transit.awk transit.p0
#
BEGIN { "date" | getline
enable_index = 1
today = $0
printf("\n/* this file was generated on %s */\n", today )
not_firstone = 0 # flag to avoid empty entry in 1st table
fpe = 0 # entry tbl array fill pointer
fpeo = 0 # entry tbl offset list fill pointer
fpdef = 0 # define list fill pointer
}
 
### /^;/ { } # line starting with a semicolon is comment
 
/^[A-Z]/ { # table name
if ( $1 == "TABLE" ) {
tbl = $2 # get table name
newtbl( tbl )
}
else if ( $1 == "COMPILE" ) {
array_name = $2
if ( $3 == "NOINDEX" ) { enable_index = 0 }
}
else { # table entry
ec = ec +1
n = split( $0, fld, " " )
action = fld[ n-1 ]
newstate = fld[ n ]
store( action, newstate )
ecct = ecct +1
}
}
 
END { store( action, newstate )
 
if ( enable_index ) {
printf( "\n/* index name #defines: */\n\n",
ec, ecct )
 
for( ii = 1; ii <= fpeo; ii++ ){
printf( "#define %-12s %3d\n", define[ ii ], ii -1 )
}
}
 
printf( "\n\n/* size of transition table is %d bytes */\n",
fpe )
 
if ( enable_index ) {
printf( "\nstatic short int %s_offset [ ] ={", array_name )
for( ii = 1; ii <= fpeo; ii++ ){
if ( (ii % 10) == 1 ) printf("\n ")
printf( " %4d", entry_offset[ ii ] )
if ( ii < fpeo ) printf( "," )
}
printf(" };\n")
}
 
printf( "\nstatic char %s_entry [ ] = {", array_name )
for( ii = 1; ii <= fpe; ii++ ){
if ( (ii % 6) == 1 ) printf("\n ")
printf( " %-14s", entry[ ii ] )
if ( ii < fpe ) printf( "," )
}
printf(" };\n")
 
}
 
function store( act, ns ){
# printf( "%s %s\n", act, ns )
entry[ ++fpe ] = act
entry[ ++fpe ] = ns
}
 
function newtbl( tbl ){
if ( not_firstone ) {
store( action, newstate )
}
not_firstone = 1
entry_offset[ ++fpeo ] = fpe # entry tbl offset list
define[ ++fpdef ] = tbl # state name to define
}
/transit/timertr.pre
0,0 → 1,527
COMPILE timertr NOINDEX
TABLE XXX
;
;Transition table for expiring timers:
;
;llc state timer retry_c s_flag p_flag action newstate
; expired >= N2
;
ADM ACK_TIMER 0 0 0 NOP ADM
ADM ACK_TIMER 0 0 1 NOP ADM
ADM ACK_TIMER 0 1 0 NOP ADM
ADM ACK_TIMER 0 1 1 NOP ADM
ADM ACK_TIMER 1 0 0 NOP ADM
ADM ACK_TIMER 1 0 1 NOP ADM
ADM ACK_TIMER 1 1 0 NOP ADM
ADM ACK_TIMER 1 1 1 NOP ADM
;;
ADM P_TIMER 0 0 0 NOP ADM
ADM P_TIMER 0 0 1 NOP ADM
ADM P_TIMER 0 1 0 NOP ADM
ADM P_TIMER 0 1 1 NOP ADM
ADM P_TIMER 1 0 0 NOP ADM
ADM P_TIMER 1 0 1 NOP ADM
ADM P_TIMER 1 1 0 NOP ADM
ADM P_TIMER 1 1 1 NOP ADM
;;
ADM REJ_TIMER 0 0 0 NOP ADM
ADM REJ_TIMER 0 0 1 NOP ADM
ADM REJ_TIMER 0 1 0 NOP ADM
ADM REJ_TIMER 0 1 1 NOP ADM
ADM REJ_TIMER 1 0 0 NOP ADM
ADM REJ_TIMER 1 0 1 NOP ADM
ADM REJ_TIMER 1 1 0 NOP ADM
ADM REJ_TIMER 1 1 1 NOP ADM
;;
ADM BUSY_TIMER 0 0 0 NOP ADM
ADM BUSY_TIMER 0 0 1 NOP ADM
ADM BUSY_TIMER 0 1 0 NOP ADM
ADM BUSY_TIMER 0 1 1 NOP ADM
ADM BUSY_TIMER 1 0 0 NOP ADM
ADM BUSY_TIMER 1 0 1 NOP ADM
ADM BUSY_TIMER 1 1 0 NOP ADM
ADM BUSY_TIMER 1 1 1 NOP ADM
;;
;;
CONN ACK_TIMER 0 0 0 NOP CONN
CONN ACK_TIMER 0 0 1 NOP CONN
CONN ACK_TIMER 0 1 0 NOP CONN
CONN ACK_TIMER 0 1 1 NOP CONN
CONN ACK_TIMER 1 0 0 NOP CONN
CONN ACK_TIMER 1 0 1 NOP CONN
CONN ACK_TIMER 1 1 0 NOP CONN
CONN ACK_TIMER 1 1 1 NOP CONN
;;
CONN P_TIMER 0 0 0 NOP CONN
CONN P_TIMER 0 0 1 NOP CONN
CONN P_TIMER 0 1 0 NOP CONN
CONN P_TIMER 0 1 1 NOP CONN
CONN P_TIMER 1 0 0 NOP CONN
CONN P_TIMER 1 0 1 NOP CONN
CONN P_TIMER 1 1 0 NOP CONN
CONN P_TIMER 1 1 1 NOP CONN
;;
CONN REJ_TIMER 0 0 0 NOP CONN
CONN REJ_TIMER 0 0 1 NOP CONN
CONN REJ_TIMER 0 1 0 NOP CONN
CONN REJ_TIMER 0 1 1 NOP CONN
CONN REJ_TIMER 1 0 0 NOP CONN
CONN REJ_TIMER 1 0 1 NOP CONN
CONN REJ_TIMER 1 1 0 NOP CONN
CONN REJ_TIMER 1 1 1 NOP CONN
;;
CONN BUSY_TIMER 0 0 0 NOP CONN
CONN BUSY_TIMER 0 0 1 NOP CONN
CONN BUSY_TIMER 0 1 0 NOP CONN
CONN BUSY_TIMER 0 1 1 NOP CONN
CONN BUSY_TIMER 1 0 0 NOP CONN
CONN BUSY_TIMER 1 0 1 NOP CONN
CONN BUSY_TIMER 1 1 0 NOP CONN
CONN BUSY_TIMER 1 1 1 NOP CONN
;;
;;
RESET_WAIT ACK_TIMER 0 0 0 NOP RESET_WAIT
RESET_WAIT ACK_TIMER 0 0 1 NOP RESET_WAIT
RESET_WAIT ACK_TIMER 0 1 0 NOP RESET_WAIT
RESET_WAIT ACK_TIMER 0 1 1 NOP RESET_WAIT
RESET_WAIT ACK_TIMER 1 0 0 NOP RESET_WAIT
RESET_WAIT ACK_TIMER 1 0 1 NOP RESET_WAIT
RESET_WAIT ACK_TIMER 1 1 0 NOP RESET_WAIT
RESET_WAIT ACK_TIMER 1 1 1 NOP RESET_WAIT
;;
RESET_WAIT P_TIMER 0 0 0 NOP RESET_WAIT
RESET_WAIT P_TIMER 0 0 1 NOP RESET_WAIT
RESET_WAIT P_TIMER 0 1 0 NOP RESET_WAIT
RESET_WAIT P_TIMER 0 1 1 NOP RESET_WAIT
RESET_WAIT P_TIMER 1 0 0 NOP RESET_WAIT
RESET_WAIT P_TIMER 1 0 1 NOP RESET_WAIT
RESET_WAIT P_TIMER 1 1 0 NOP RESET_WAIT
RESET_WAIT P_TIMER 1 1 1 NOP RESET_WAIT
;;
RESET_WAIT REJ_TIMER 0 0 0 NOP RESET_WAIT
RESET_WAIT REJ_TIMER 0 0 1 NOP RESET_WAIT
RESET_WAIT REJ_TIMER 0 1 0 NOP RESET_WAIT
RESET_WAIT REJ_TIMER 0 1 1 NOP RESET_WAIT
RESET_WAIT REJ_TIMER 1 0 0 NOP RESET_WAIT
RESET_WAIT REJ_TIMER 1 0 1 NOP RESET_WAIT
RESET_WAIT REJ_TIMER 1 1 0 NOP RESET_WAIT
RESET_WAIT REJ_TIMER 1 1 1 NOP RESET_WAIT
;;
RESET_WAIT BUSY_TIMER 0 0 0 NOP RESET_WAIT
RESET_WAIT BUSY_TIMER 0 0 1 NOP RESET_WAIT
RESET_WAIT BUSY_TIMER 0 1 0 NOP RESET_WAIT
RESET_WAIT BUSY_TIMER 0 1 1 NOP RESET_WAIT
RESET_WAIT BUSY_TIMER 1 0 0 NOP RESET_WAIT
RESET_WAIT BUSY_TIMER 1 0 1 NOP RESET_WAIT
RESET_WAIT BUSY_TIMER 1 1 0 NOP RESET_WAIT
RESET_WAIT BUSY_TIMER 1 1 1 NOP RESET_WAIT
;;
;;
RESET_CHECK ACK_TIMER 0 0 0 NOP RESET_CHECK
RESET_CHECK ACK_TIMER 0 0 1 NOP RESET_CHECK
RESET_CHECK ACK_TIMER 0 1 0 NOP RESET_CHECK
RESET_CHECK ACK_TIMER 0 1 1 NOP RESET_CHECK
RESET_CHECK ACK_TIMER 1 0 0 NOP RESET_CHECK
RESET_CHECK ACK_TIMER 1 0 1 NOP RESET_CHECK
RESET_CHECK ACK_TIMER 1 1 0 NOP RESET_CHECK
RESET_CHECK ACK_TIMER 1 1 1 NOP RESET_CHECK
;;
RESET_CHECK P_TIMER 0 0 0 NOP RESET_CHECK
RESET_CHECK P_TIMER 0 0 1 NOP RESET_CHECK
RESET_CHECK P_TIMER 0 1 0 NOP RESET_CHECK
RESET_CHECK P_TIMER 0 1 1 NOP RESET_CHECK
RESET_CHECK P_TIMER 1 0 0 NOP RESET_CHECK
RESET_CHECK P_TIMER 1 0 1 NOP RESET_CHECK
RESET_CHECK P_TIMER 1 1 0 NOP RESET_CHECK
RESET_CHECK P_TIMER 1 1 1 NOP RESET_CHECK
;;
RESET_CHECK REJ_TIMER 0 0 0 NOP RESET_CHECK
RESET_CHECK REJ_TIMER 0 0 1 NOP RESET_CHECK
RESET_CHECK REJ_TIMER 0 1 0 NOP RESET_CHECK
RESET_CHECK REJ_TIMER 0 1 1 NOP RESET_CHECK
RESET_CHECK REJ_TIMER 1 0 0 NOP RESET_CHECK
RESET_CHECK REJ_TIMER 1 0 1 NOP RESET_CHECK
RESET_CHECK REJ_TIMER 1 1 0 NOP RESET_CHECK
RESET_CHECK REJ_TIMER 1 1 1 NOP RESET_CHECK
;;
RESET_CHECK BUSY_TIMER 0 0 0 NOP RESET_CHECK
RESET_CHECK BUSY_TIMER 0 0 1 NOP RESET_CHECK
RESET_CHECK BUSY_TIMER 0 1 0 NOP RESET_CHECK
RESET_CHECK BUSY_TIMER 0 1 1 NOP RESET_CHECK
RESET_CHECK BUSY_TIMER 1 0 0 NOP RESET_CHECK
RESET_CHECK BUSY_TIMER 1 0 1 NOP RESET_CHECK
RESET_CHECK BUSY_TIMER 1 1 0 NOP RESET_CHECK
RESET_CHECK BUSY_TIMER 1 1 1 NOP RESET_CHECK
;;
;;
;;
SETUP ACK_TIMER 0 0 0 SETUP7 SETUP
SETUP ACK_TIMER 0 0 1 SETUP7 SETUP
SETUP ACK_TIMER 0 1 0 SETUP3 NORMAL
SETUP ACK_TIMER 0 1 1 SETUP3 NORMAL
SETUP ACK_TIMER 1 0 0 SETUP8 ADM
SETUP ACK_TIMER 1 0 1 SETUP8 ADM
SETUP ACK_TIMER 1 1 0 SETUP3 NORMAL
SETUP ACK_TIMER 1 1 1 SETUP3 NORMAL
;;
SETUP P_TIMER 0 0 0 NOP SETUP
SETUP P_TIMER 0 0 1 NOP SETUP
SETUP P_TIMER 0 1 0 NOP SETUP
SETUP P_TIMER 0 1 1 NOP SETUP
SETUP P_TIMER 1 0 0 NOP SETUP
SETUP P_TIMER 1 0 1 NOP SETUP
SETUP P_TIMER 1 1 0 NOP SETUP
SETUP P_TIMER 1 1 1 NOP SETUP
;;
SETUP REJ_TIMER 0 0 0 NOP SETUP
SETUP REJ_TIMER 0 0 1 NOP SETUP
SETUP REJ_TIMER 0 1 0 NOP SETUP
SETUP REJ_TIMER 0 1 1 NOP SETUP
SETUP REJ_TIMER 1 0 0 NOP SETUP
SETUP REJ_TIMER 1 0 1 NOP SETUP
SETUP REJ_TIMER 1 1 0 NOP SETUP
SETUP REJ_TIMER 1 1 1 NOP SETUP
;;
SETUP BUSY_TIMER 0 0 0 NOP SETUP
SETUP BUSY_TIMER 0 0 1 NOP SETUP
SETUP BUSY_TIMER 0 1 0 NOP SETUP
SETUP BUSY_TIMER 0 1 1 NOP SETUP
SETUP BUSY_TIMER 1 0 0 NOP SETUP
SETUP BUSY_TIMER 1 0 1 NOP SETUP
SETUP BUSY_TIMER 1 1 0 NOP SETUP
SETUP BUSY_TIMER 1 1 1 NOP SETUP
;;
;;
;;
RESET ACK_TIMER 0 0 0 RESET7 RESET
RESET ACK_TIMER 0 0 1 RESET7 RESET
RESET ACK_TIMER 0 1 0 RESET3 NORMAL
RESET ACK_TIMER 0 1 1 RESET3 NORMAL
RESET ACK_TIMER 1 0 0 RESET8 ADM
RESET ACK_TIMER 1 0 1 RESET8 ADM
RESET ACK_TIMER 1 1 0 RESET3 NORMAL
RESET ACK_TIMER 1 1 1 RESET3 NORMAL
;;
RESET P_TIMER 0 0 0 NOP RESET
RESET P_TIMER 0 0 1 NOP RESET
RESET P_TIMER 0 1 0 NOP RESET
RESET P_TIMER 0 1 1 NOP RESET
RESET P_TIMER 1 0 0 NOP RESET
RESET P_TIMER 1 0 1 NOP RESET
RESET P_TIMER 1 1 0 NOP RESET
RESET P_TIMER 1 1 1 NOP RESET
;;
RESET REJ_TIMER 0 0 0 NOP RESET
RESET REJ_TIMER 0 0 1 NOP RESET
RESET REJ_TIMER 0 1 0 NOP RESET
RESET REJ_TIMER 0 1 1 NOP RESET
RESET REJ_TIMER 1 0 0 NOP RESET
RESET REJ_TIMER 1 0 1 NOP RESET
RESET REJ_TIMER 1 1 0 NOP RESET
RESET REJ_TIMER 1 1 1 NOP RESET
;;
RESET BUSY_TIMER 0 0 0 NOP RESET
RESET BUSY_TIMER 0 0 1 NOP RESET
RESET BUSY_TIMER 0 1 0 NOP RESET
RESET BUSY_TIMER 0 1 1 NOP RESET
RESET BUSY_TIMER 1 0 0 NOP RESET
RESET BUSY_TIMER 1 0 1 NOP RESET
RESET BUSY_TIMER 1 1 0 NOP RESET
RESET BUSY_TIMER 1 1 1 NOP RESET
;;
;;
D_CONN ACK_TIMER 0 0 0 D_CONN6 D_CONN
D_CONN ACK_TIMER 0 0 1 D_CONN6 D_CONN
D_CONN ACK_TIMER 0 1 0 D_CONN6 D_CONN
D_CONN ACK_TIMER 0 1 1 D_CONN6 D_CONN
D_CONN ACK_TIMER 1 0 0 D_CONN7 ADM
D_CONN ACK_TIMER 1 0 1 D_CONN7 ADM
D_CONN ACK_TIMER 1 1 0 D_CONN7 ADM
D_CONN ACK_TIMER 1 1 1 D_CONN7 ADM
;;
D_CONN P_TIMER 0 0 0 NOP D_CONN
D_CONN P_TIMER 0 0 1 NOP D_CONN
D_CONN P_TIMER 0 1 0 NOP D_CONN
D_CONN P_TIMER 0 1 1 NOP D_CONN
D_CONN P_TIMER 1 0 0 NOP D_CONN
D_CONN P_TIMER 1 0 1 NOP D_CONN
D_CONN P_TIMER 1 1 0 NOP D_CONN
D_CONN P_TIMER 1 1 1 NOP D_CONN
;;
D_CONN REJ_TIMER 0 0 0 NOP D_CONN
D_CONN REJ_TIMER 0 0 1 NOP D_CONN
D_CONN REJ_TIMER 0 1 0 NOP D_CONN
D_CONN REJ_TIMER 0 1 1 NOP D_CONN
D_CONN REJ_TIMER 1 0 0 NOP D_CONN
D_CONN REJ_TIMER 1 0 1 NOP D_CONN
D_CONN REJ_TIMER 1 1 0 NOP D_CONN
D_CONN REJ_TIMER 1 1 1 NOP D_CONN
;;
D_CONN BUSY_TIMER 0 0 0 NOP D_CONN
D_CONN BUSY_TIMER 0 0 1 NOP D_CONN
D_CONN BUSY_TIMER 0 1 0 NOP D_CONN
D_CONN BUSY_TIMER 0 1 1 NOP D_CONN
D_CONN BUSY_TIMER 1 0 0 NOP D_CONN
D_CONN BUSY_TIMER 1 0 1 NOP D_CONN
D_CONN BUSY_TIMER 1 1 0 NOP D_CONN
D_CONN BUSY_TIMER 1 1 1 NOP D_CONN
;;
;;
ERROR ACK_TIMER 0 0 0 ERR7 ERROR
ERROR ACK_TIMER 0 0 1 ERR7 ERROR
ERROR ACK_TIMER 0 1 0 ERR7 ERROR
ERROR ACK_TIMER 0 1 1 ERR7 ERROR
ERROR ACK_TIMER 1 0 0 ERR8 RESET_WAIT
ERROR ACK_TIMER 1 0 1 ERR8 RESET_WAIT
ERROR ACK_TIMER 1 1 0 ERR8 RESET_WAIT
ERROR ACK_TIMER 1 1 1 ERR8 RESET_WAIT
;;
ERROR P_TIMER 0 0 0 NOP ERROR
ERROR P_TIMER 0 0 1 NOP ERROR
ERROR P_TIMER 0 1 0 NOP ERROR
ERROR P_TIMER 0 1 1 NOP ERROR
ERROR P_TIMER 1 0 0 NOP ERROR
ERROR P_TIMER 1 0 1 NOP ERROR
ERROR P_TIMER 1 1 0 NOP ERROR
ERROR P_TIMER 1 1 1 NOP ERROR
;;
ERROR REJ_TIMER 0 0 0 NOP ERROR
ERROR REJ_TIMER 0 0 1 NOP ERROR
ERROR REJ_TIMER 0 1 0 NOP ERROR
ERROR REJ_TIMER 0 1 1 NOP ERROR
ERROR REJ_TIMER 1 0 0 NOP ERROR
ERROR REJ_TIMER 1 0 1 NOP ERROR
ERROR REJ_TIMER 1 1 0 NOP ERROR
ERROR REJ_TIMER 1 1 1 NOP ERROR
;;
ERROR BUSY_TIMER 0 0 0 NOP ERROR
ERROR BUSY_TIMER 0 0 1 NOP ERROR
ERROR BUSY_TIMER 0 1 0 NOP ERROR
ERROR BUSY_TIMER 0 1 1 NOP ERROR
ERROR BUSY_TIMER 1 0 0 NOP ERROR
ERROR BUSY_TIMER 1 0 1 NOP ERROR
ERROR BUSY_TIMER 1 1 0 NOP ERROR
ERROR BUSY_TIMER 1 1 1 NOP ERROR
;;
;;
NORMAL ACK_TIMER 0 0 0 NORMAL20 AWAIT
NORMAL ACK_TIMER 0 0 1 NOP NORMAL
NORMAL ACK_TIMER 0 1 0 NORMAL20 AWAIT
NORMAL ACK_TIMER 0 1 1 NOP NORMAL
NORMAL ACK_TIMER 1 0 0 SH11 RESET_WAIT
NORMAL ACK_TIMER 1 0 1 SH11 RESET_WAIT
NORMAL ACK_TIMER 1 1 0 SH11 RESET_WAIT
NORMAL ACK_TIMER 1 1 1 SH11 RESET_WAIT
;;
NORMAL P_TIMER 0 0 0 NORMAL19 NORMAL
NORMAL P_TIMER 0 0 1 NORMAL19 NORMAL
NORMAL P_TIMER 0 1 0 NORMAL19 NORMAL
NORMAL P_TIMER 0 1 1 NORMAL19 NORMAL
NORMAL P_TIMER 1 0 0 SH11 RESET_WAIT
NORMAL P_TIMER 1 0 1 SH11 RESET_WAIT
NORMAL P_TIMER 1 1 0 SH11 RESET_WAIT
NORMAL P_TIMER 1 1 1 SH11 RESET_WAIT
;;
NORMAL REJ_TIMER 0 0 0 NOP NORMAL
NORMAL REJ_TIMER 0 0 1 NOP NORMAL
NORMAL REJ_TIMER 0 1 0 NOP NORMAL
NORMAL REJ_TIMER 0 1 1 NOP NORMAL
NORMAL REJ_TIMER 1 0 0 SH11 RESET_WAIT
NORMAL REJ_TIMER 1 0 1 SH11 RESET_WAIT
NORMAL REJ_TIMER 1 1 0 SH11 RESET_WAIT
NORMAL REJ_TIMER 1 1 1 SH11 RESET_WAIT
;;
NORMAL BUSY_TIMER 0 0 0 NORMAL20 AWAIT
NORMAL BUSY_TIMER 0 0 1 NOP NORMAL
NORMAL BUSY_TIMER 0 1 0 NORMAL20 AWAIT
NORMAL BUSY_TIMER 0 1 1 NOP NORMAL
NORMAL BUSY_TIMER 1 0 0 SH11 RESET_WAIT
NORMAL BUSY_TIMER 1 0 1 SH11 RESET_WAIT
NORMAL BUSY_TIMER 1 1 0 SH11 RESET_WAIT
NORMAL BUSY_TIMER 1 1 1 SH11 RESET_WAIT
;;
;;
BUSY ACK_TIMER 0 0 0 BUSY24 AWAIT_BUSY
BUSY ACK_TIMER 0 0 1 NOP BUSY
BUSY ACK_TIMER 0 1 0 BUSY24 AWAIT_BUSY
BUSY ACK_TIMER 0 1 1 NOP BUSY
BUSY ACK_TIMER 1 0 0 SH11 RESET_WAIT
BUSY ACK_TIMER 1 0 1 SH11 RESET_WAIT
BUSY ACK_TIMER 1 1 0 SH11 RESET_WAIT
BUSY ACK_TIMER 1 1 1 SH11 RESET_WAIT
;;
BUSY P_TIMER 0 0 0 BUSY23 BUSY
BUSY P_TIMER 0 0 1 BUSY23 BUSY
BUSY P_TIMER 0 1 0 BUSY23 BUSY
BUSY P_TIMER 0 1 1 BUSY23 BUSY
BUSY P_TIMER 1 0 0 SH11 RESET_WAIT
BUSY P_TIMER 1 0 1 SH11 RESET_WAIT
BUSY P_TIMER 1 1 0 SH11 RESET_WAIT
BUSY P_TIMER 1 1 1 SH11 RESET_WAIT
;;
BUSY REJ_TIMER 0 0 0 BUSY25 BUSY
BUSY REJ_TIMER 0 0 1 BUSY26 BUSY
BUSY REJ_TIMER 0 1 0 BUSY25 BUSY
BUSY REJ_TIMER 0 1 1 BUSY26 BUSY
BUSY REJ_TIMER 1 0 0 SH11 RESET_WAIT
BUSY REJ_TIMER 1 0 1 SH11 RESET_WAIT
BUSY REJ_TIMER 1 1 0 SH11 RESET_WAIT
BUSY REJ_TIMER 1 1 1 SH11 RESET_WAIT
;;
BUSY BUSY_TIMER 0 0 0 NOP BUSY
BUSY BUSY_TIMER 0 0 1 NOP BUSY
BUSY BUSY_TIMER 0 1 0 NOP BUSY
BUSY BUSY_TIMER 0 1 1 NOP BUSY
BUSY BUSY_TIMER 1 0 0 SH11 RESET_WAIT
BUSY BUSY_TIMER 1 0 1 SH11 RESET_WAIT
BUSY BUSY_TIMER 1 1 0 SH11 RESET_WAIT
BUSY BUSY_TIMER 1 1 1 SH11 RESET_WAIT
;;
;;
REJECT ACK_TIMER 0 0 0 NOP REJECT
REJECT ACK_TIMER 0 0 1 NOP REJECT
REJECT ACK_TIMER 0 1 0 NOP REJECT
REJECT ACK_TIMER 0 1 1 NOP REJECT
REJECT ACK_TIMER 1 0 0 SH11 RESET_WAIT
REJECT ACK_TIMER 1 0 1 SH11 RESET_WAIT
REJECT ACK_TIMER 1 1 0 SH11 RESET_WAIT
REJECT ACK_TIMER 1 1 1 SH11 RESET_WAIT
;;
REJECT P_TIMER 0 0 0 NOP REJECT
REJECT P_TIMER 0 0 1 NOP REJECT
REJECT P_TIMER 0 1 0 NOP REJECT
REJECT P_TIMER 0 1 1 NOP REJECT
REJECT P_TIMER 1 0 0 SH11 RESET_WAIT
REJECT P_TIMER 1 0 1 SH11 RESET_WAIT
REJECT P_TIMER 1 1 0 SH11 RESET_WAIT
REJECT P_TIMER 1 1 1 SH11 RESET_WAIT
;;
REJECT REJ_TIMER 0 0 0 NOP REJECT
REJECT REJ_TIMER 0 0 1 NOP REJECT
REJECT REJ_TIMER 0 1 0 NOP REJECT
REJECT REJ_TIMER 0 1 1 NOP REJECT
REJECT REJ_TIMER 1 0 0 SH11 RESET_WAIT
REJECT REJ_TIMER 1 0 1 SH11 RESET_WAIT
REJECT REJ_TIMER 1 1 0 SH11 RESET_WAIT
REJECT REJ_TIMER 1 1 1 SH11 RESET_WAIT
;;
REJECT BUSY_TIMER 0 0 0 NOP REJECT
REJECT BUSY_TIMER 0 0 1 NOP REJECT
REJECT BUSY_TIMER 0 1 0 NOP REJECT
REJECT BUSY_TIMER 0 1 1 NOP REJECT
REJECT BUSY_TIMER 1 0 0 SH11 RESET_WAIT
REJECT BUSY_TIMER 1 0 1 SH11 RESET_WAIT
REJECT BUSY_TIMER 1 1 0 SH11 RESET_WAIT
REJECT BUSY_TIMER 1 1 1 SH11 RESET_WAIT
;;
;;
AWAIT ACK_TIMER 0 0 0 NOP AWAIT
AWAIT ACK_TIMER 0 0 1 NOP AWAIT
AWAIT ACK_TIMER 0 1 0 NOP AWAIT
AWAIT ACK_TIMER 0 1 1 NOP AWAIT
AWAIT ACK_TIMER 1 0 0 SH11 RESET_WAIT
AWAIT ACK_TIMER 1 0 1 SH11 RESET_WAIT
AWAIT ACK_TIMER 1 1 0 SH11 RESET_WAIT
AWAIT ACK_TIMER 1 1 1 SH11 RESET_WAIT
;;
AWAIT P_TIMER 0 0 0 NOP AWAIT
AWAIT P_TIMER 0 0 1 NOP AWAIT
AWAIT P_TIMER 0 1 0 NOP AWAIT
AWAIT P_TIMER 0 1 1 NOP AWAIT
AWAIT P_TIMER 1 0 0 SH11 RESET_WAIT
AWAIT P_TIMER 1 0 1 SH11 RESET_WAIT
AWAIT P_TIMER 1 1 0 SH11 RESET_WAIT
AWAIT P_TIMER 1 1 1 SH11 RESET_WAIT
;;
AWAIT REJ_TIMER 0 0 0 NOP AWAIT
AWAIT REJ_TIMER 0 0 1 NOP AWAIT
AWAIT REJ_TIMER 0 1 0 NOP AWAIT
AWAIT REJ_TIMER 0 1 1 NOP AWAIT
AWAIT REJ_TIMER 1 0 0 SH11 RESET_WAIT
AWAIT REJ_TIMER 1 0 1 SH11 RESET_WAIT
AWAIT REJ_TIMER 1 1 0 SH11 RESET_WAIT
AWAIT REJ_TIMER 1 1 1 SH11 RESET_WAIT
;;
AWAIT BUSY_TIMER 0 0 0 NOP AWAIT
AWAIT BUSY_TIMER 0 0 1 NOP AWAIT
AWAIT BUSY_TIMER 0 1 0 NOP AWAIT
AWAIT BUSY_TIMER 0 1 1 NOP AWAIT
AWAIT BUSY_TIMER 1 0 0 SH11 RESET_WAIT
AWAIT BUSY_TIMER 1 0 1 SH11 RESET_WAIT
AWAIT BUSY_TIMER 1 1 0 SH11 RESET_WAIT
AWAIT BUSY_TIMER 1 1 1 SH11 RESET_WAIT
;;
;;
AWAIT_BUSY ACK_TIMER 0 0 0 NOP AWAIT_BUSY
AWAIT_BUSY ACK_TIMER 0 0 1 NOP AWAIT_BUSY
AWAIT_BUSY ACK_TIMER 0 1 0 NOP AWAIT_BUSY
AWAIT_BUSY ACK_TIMER 0 1 1 NOP AWAIT_BUSY
AWAIT_BUSY ACK_TIMER 1 0 0 SH11 RESET_WAIT
AWAIT_BUSY ACK_TIMER 1 0 1 SH11 RESET_WAIT
AWAIT_BUSY ACK_TIMER 1 1 0 SH11 RESET_WAIT
AWAIT_BUSY ACK_TIMER 1 1 1 SH11 RESET_WAIT
;;
AWAIT_BUSY P_TIMER 0 0 0 NOP AWAIT_BUSY
AWAIT_BUSY P_TIMER 0 0 1 NOP AWAIT_BUSY
AWAIT_BUSY P_TIMER 0 1 0 NOP AWAIT_BUSY
AWAIT_BUSY P_TIMER 0 1 1 NOP AWAIT_BUSY
AWAIT_BUSY P_TIMER 1 0 0 SH11 RESET_WAIT
AWAIT_BUSY P_TIMER 1 0 1 SH11 RESET_WAIT
AWAIT_BUSY P_TIMER 1 1 0 SH11 RESET_WAIT
AWAIT_BUSY P_TIMER 1 1 1 SH11 RESET_WAIT
;;
AWAIT_BUSY REJ_TIMER 0 0 0 NOP AWAIT_BUSY
AWAIT_BUSY REJ_TIMER 0 0 1 NOP AWAIT_BUSY
AWAIT_BUSY REJ_TIMER 0 1 0 NOP AWAIT_BUSY
AWAIT_BUSY REJ_TIMER 0 1 1 NOP AWAIT_BUSY
AWAIT_BUSY REJ_TIMER 1 0 0 SH11 RESET_WAIT
AWAIT_BUSY REJ_TIMER 1 0 1 SH11 RESET_WAIT
AWAIT_BUSY REJ_TIMER 1 1 0 SH11 RESET_WAIT
AWAIT_BUSY REJ_TIMER 1 1 1 SH11 RESET_WAIT
;;
AWAIT_BUSY BUSY_TIMER 0 0 0 NOP AWAIT_BUSY
AWAIT_BUSY BUSY_TIMER 0 0 1 NOP AWAIT_BUSY
AWAIT_BUSY BUSY_TIMER 0 1 0 NOP AWAIT_BUSY
AWAIT_BUSY BUSY_TIMER 0 1 1 NOP AWAIT_BUSY
AWAIT_BUSY BUSY_TIMER 1 0 0 SH11 RESET_WAIT
AWAIT_BUSY BUSY_TIMER 1 0 1 SH11 RESET_WAIT
AWAIT_BUSY BUSY_TIMER 1 1 0 SH11 RESET_WAIT
AWAIT_BUSY BUSY_TIMER 1 1 1 SH11 RESET_WAIT
;;
;;
AWAIT_REJECT ACK_TIMER 0 0 0 NOP AWAIT_REJECT
AWAIT_REJECT ACK_TIMER 0 0 1 NOP AWAIT_REJECT
AWAIT_REJECT ACK_TIMER 0 1 0 NOP AWAIT_REJECT
AWAIT_REJECT ACK_TIMER 0 1 1 NOP AWAIT_REJECT
AWAIT_REJECT ACK_TIMER 1 0 0 SH11 RESET_WAIT
AWAIT_REJECT ACK_TIMER 1 0 1 SH11 RESET_WAIT
AWAIT_REJECT ACK_TIMER 1 1 0 SH11 RESET_WAIT
AWAIT_REJECT ACK_TIMER 1 1 1 SH11 RESET_WAIT
;;
AWAIT_REJECT P_TIMER 0 0 0 NOP AWAIT_REJECT
AWAIT_REJECT P_TIMER 0 0 1 NOP AWAIT_REJECT
AWAIT_REJECT P_TIMER 0 1 0 NOP AWAIT_REJECT
AWAIT_REJECT P_TIMER 0 1 1 NOP AWAIT_REJECT
AWAIT_REJECT P_TIMER 1 0 0 SH11 RESET_WAIT
AWAIT_REJECT P_TIMER 1 0 1 SH11 RESET_WAIT
AWAIT_REJECT P_TIMER 1 1 0 SH11 RESET_WAIT
AWAIT_REJECT P_TIMER 1 1 1 SH11 RESET_WAIT
;;
AWAIT_REJECT REJ_TIMER 0 0 0 NOP AWAIT_REJECT
AWAIT_REJECT REJ_TIMER 0 0 1 NOP AWAIT_REJECT
AWAIT_REJECT REJ_TIMER 0 1 0 NOP AWAIT_REJECT
AWAIT_REJECT REJ_TIMER 0 1 1 NOP AWAIT_REJECT
AWAIT_REJECT REJ_TIMER 1 0 0 SH11 RESET_WAIT
AWAIT_REJECT REJ_TIMER 1 0 1 SH11 RESET_WAIT
AWAIT_REJECT REJ_TIMER 1 1 0 SH11 RESET_WAIT
AWAIT_REJECT REJ_TIMER 1 1 1 SH11 RESET_WAIT
;;
AWAIT_REJECT BUSY_TIMER 0 0 0 NOP AWAIT_REJECT
AWAIT_REJECT BUSY_TIMER 0 0 1 NOP AWAIT_REJECT
AWAIT_REJECT BUSY_TIMER 0 1 0 NOP AWAIT_REJECT
AWAIT_REJECT BUSY_TIMER 0 1 1 NOP AWAIT_REJECT
AWAIT_REJECT BUSY_TIMER 1 0 0 SH11 RESET_WAIT
AWAIT_REJECT BUSY_TIMER 1 0 1 SH11 RESET_WAIT
AWAIT_REJECT BUSY_TIMER 1 1 0 SH11 RESET_WAIT
AWAIT_REJECT BUSY_TIMER 1 1 1 SH11 RESET_WAIT
;;
/transit/timertr.h
0,0 → 1,157
 
/* this file was generated on Thu Jan 8 00:21:21 GMT 1998 */
 
 
/* size of transition table is 898 bytes */
 
static char timertr_entry [ ] = {
NOP , ADM , NOP , ADM , NOP , ADM ,
NOP , ADM , NOP , ADM , NOP , ADM ,
NOP , ADM , NOP , ADM , NOP , ADM ,
NOP , ADM , NOP , ADM , NOP , ADM ,
NOP , ADM , NOP , ADM , NOP , ADM ,
NOP , ADM , NOP , ADM , NOP , ADM ,
NOP , ADM , NOP , ADM , NOP , ADM ,
NOP , ADM , NOP , ADM , NOP , ADM ,
NOP , ADM , NOP , ADM , NOP , ADM ,
NOP , ADM , NOP , ADM , NOP , ADM ,
NOP , ADM , NOP , ADM , NOP , CONN ,
NOP , CONN , NOP , CONN , NOP , CONN ,
NOP , CONN , NOP , CONN , NOP , CONN ,
NOP , CONN , NOP , CONN , NOP , CONN ,
NOP , CONN , NOP , CONN , NOP , CONN ,
NOP , CONN , NOP , CONN , NOP , CONN ,
NOP , CONN , NOP , CONN , NOP , CONN ,
NOP , CONN , NOP , CONN , NOP , CONN ,
NOP , CONN , NOP , CONN , NOP , CONN ,
NOP , CONN , NOP , CONN , NOP , CONN ,
NOP , CONN , NOP , CONN , NOP , CONN ,
NOP , CONN , NOP , RESET_WAIT , NOP , RESET_WAIT ,
NOP , RESET_WAIT , NOP , RESET_WAIT , NOP , RESET_WAIT ,
NOP , RESET_WAIT , NOP , RESET_WAIT , NOP , RESET_WAIT ,
NOP , RESET_WAIT , NOP , RESET_WAIT , NOP , RESET_WAIT ,
NOP , RESET_WAIT , NOP , RESET_WAIT , NOP , RESET_WAIT ,
NOP , RESET_WAIT , NOP , RESET_WAIT , NOP , RESET_WAIT ,
NOP , RESET_WAIT , NOP , RESET_WAIT , NOP , RESET_WAIT ,
NOP , RESET_WAIT , NOP , RESET_WAIT , NOP , RESET_WAIT ,
NOP , RESET_WAIT , NOP , RESET_WAIT , NOP , RESET_WAIT ,
NOP , RESET_WAIT , NOP , RESET_WAIT , NOP , RESET_WAIT ,
NOP , RESET_WAIT , NOP , RESET_WAIT , NOP , RESET_WAIT ,
NOP , RESET_CHECK , NOP , RESET_CHECK , NOP , RESET_CHECK ,
NOP , RESET_CHECK , NOP , RESET_CHECK , NOP , RESET_CHECK ,
NOP , RESET_CHECK , NOP , RESET_CHECK , NOP , RESET_CHECK ,
NOP , RESET_CHECK , NOP , RESET_CHECK , NOP , RESET_CHECK ,
NOP , RESET_CHECK , NOP , RESET_CHECK , NOP , RESET_CHECK ,
NOP , RESET_CHECK , NOP , RESET_CHECK , NOP , RESET_CHECK ,
NOP , RESET_CHECK , NOP , RESET_CHECK , NOP , RESET_CHECK ,
NOP , RESET_CHECK , NOP , RESET_CHECK , NOP , RESET_CHECK ,
NOP , RESET_CHECK , NOP , RESET_CHECK , NOP , RESET_CHECK ,
NOP , RESET_CHECK , NOP , RESET_CHECK , NOP , RESET_CHECK ,
NOP , RESET_CHECK , NOP , RESET_CHECK , SETUP7 , SETUP ,
SETUP7 , SETUP , SETUP3 , NORMAL , SETUP3 , NORMAL ,
SETUP8 , ADM , SETUP8 , ADM , SETUP3 , NORMAL ,
SETUP3 , NORMAL , NOP , SETUP , NOP , SETUP ,
NOP , SETUP , NOP , SETUP , NOP , SETUP ,
NOP , SETUP , NOP , SETUP , NOP , SETUP ,
NOP , SETUP , NOP , SETUP , NOP , SETUP ,
NOP , SETUP , NOP , SETUP , NOP , SETUP ,
NOP , SETUP , NOP , SETUP , NOP , SETUP ,
NOP , SETUP , NOP , SETUP , NOP , SETUP ,
NOP , SETUP , NOP , SETUP , NOP , SETUP ,
NOP , SETUP , RESET7 , RESET , RESET7 , RESET ,
RESET3 , NORMAL , RESET3 , NORMAL , RESET8 , ADM ,
RESET8 , ADM , RESET3 , NORMAL , RESET3 , NORMAL ,
NOP , RESET , NOP , RESET , NOP , RESET ,
NOP , RESET , NOP , RESET , NOP , RESET ,
NOP , RESET , NOP , RESET , NOP , RESET ,
NOP , RESET , NOP , RESET , NOP , RESET ,
NOP , RESET , NOP , RESET , NOP , RESET ,
NOP , RESET , NOP , RESET , NOP , RESET ,
NOP , RESET , NOP , RESET , NOP , RESET ,
NOP , RESET , NOP , RESET , NOP , RESET ,
D_CONN6 , D_CONN , D_CONN6 , D_CONN , D_CONN6 , D_CONN ,
D_CONN6 , D_CONN , D_CONN7 , ADM , D_CONN7 , ADM ,
D_CONN7 , ADM , D_CONN7 , ADM , NOP , D_CONN ,
NOP , D_CONN , NOP , D_CONN , NOP , D_CONN ,
NOP , D_CONN , NOP , D_CONN , NOP , D_CONN ,
NOP , D_CONN , NOP , D_CONN , NOP , D_CONN ,
NOP , D_CONN , NOP , D_CONN , NOP , D_CONN ,
NOP , D_CONN , NOP , D_CONN , NOP , D_CONN ,
NOP , D_CONN , NOP , D_CONN , NOP , D_CONN ,
NOP , D_CONN , NOP , D_CONN , NOP , D_CONN ,
NOP , D_CONN , NOP , D_CONN , ERR7 , ERROR ,
ERR7 , ERROR , ERR7 , ERROR , ERR7 , ERROR ,
ERR8 , RESET_WAIT , ERR8 , RESET_WAIT , ERR8 , RESET_WAIT ,
ERR8 , RESET_WAIT , NOP , ERROR , NOP , ERROR ,
NOP , ERROR , NOP , ERROR , NOP , ERROR ,
NOP , ERROR , NOP , ERROR , NOP , ERROR ,
NOP , ERROR , NOP , ERROR , NOP , ERROR ,
NOP , ERROR , NOP , ERROR , NOP , ERROR ,
NOP , ERROR , NOP , ERROR , NOP , ERROR ,
NOP , ERROR , NOP , ERROR , NOP , ERROR ,
NOP , ERROR , NOP , ERROR , NOP , ERROR ,
NOP , ERROR , NORMAL20 , AWAIT , NOP , NORMAL ,
NORMAL20 , AWAIT , NOP , NORMAL , SH11 , RESET_WAIT ,
SH11 , RESET_WAIT , SH11 , RESET_WAIT , SH11 , RESET_WAIT ,
NORMAL19 , NORMAL , NORMAL19 , NORMAL , NORMAL19 , NORMAL ,
NORMAL19 , NORMAL , SH11 , RESET_WAIT , SH11 , RESET_WAIT ,
SH11 , RESET_WAIT , SH11 , RESET_WAIT , NOP , NORMAL ,
NOP , NORMAL , NOP , NORMAL , NOP , NORMAL ,
SH11 , RESET_WAIT , SH11 , RESET_WAIT , SH11 , RESET_WAIT ,
SH11 , RESET_WAIT , NORMAL20 , AWAIT , NOP , NORMAL ,
NORMAL20 , AWAIT , NOP , NORMAL , SH11 , RESET_WAIT ,
SH11 , RESET_WAIT , SH11 , RESET_WAIT , SH11 , RESET_WAIT ,
BUSY24 , AWAIT_BUSY , NOP , BUSY , BUSY24 , AWAIT_BUSY ,
NOP , BUSY , SH11 , RESET_WAIT , SH11 , RESET_WAIT ,
SH11 , RESET_WAIT , SH11 , RESET_WAIT , BUSY23 , BUSY ,
BUSY23 , BUSY , BUSY23 , BUSY , BUSY23 , BUSY ,
SH11 , RESET_WAIT , SH11 , RESET_WAIT , SH11 , RESET_WAIT ,
SH11 , RESET_WAIT , BUSY25 , BUSY , BUSY26 , BUSY ,
BUSY25 , BUSY , BUSY26 , BUSY , SH11 , RESET_WAIT ,
SH11 , RESET_WAIT , SH11 , RESET_WAIT , SH11 , RESET_WAIT ,
NOP , BUSY , NOP , BUSY , NOP , BUSY ,
NOP , BUSY , SH11 , RESET_WAIT , SH11 , RESET_WAIT ,
SH11 , RESET_WAIT , SH11 , RESET_WAIT , NOP , REJECT ,
NOP , REJECT , NOP , REJECT , NOP , REJECT ,
SH11 , RESET_WAIT , SH11 , RESET_WAIT , SH11 , RESET_WAIT ,
SH11 , RESET_WAIT , NOP , REJECT , NOP , REJECT ,
NOP , REJECT , NOP , REJECT , SH11 , RESET_WAIT ,
SH11 , RESET_WAIT , SH11 , RESET_WAIT , SH11 , RESET_WAIT ,
NOP , REJECT , NOP , REJECT , NOP , REJECT ,
NOP , REJECT , SH11 , RESET_WAIT , SH11 , RESET_WAIT ,
SH11 , RESET_WAIT , SH11 , RESET_WAIT , NOP , REJECT ,
NOP , REJECT , NOP , REJECT , NOP , REJECT ,
SH11 , RESET_WAIT , SH11 , RESET_WAIT , SH11 , RESET_WAIT ,
SH11 , RESET_WAIT , NOP , AWAIT , NOP , AWAIT ,
NOP , AWAIT , NOP , AWAIT , SH11 , RESET_WAIT ,
SH11 , RESET_WAIT , SH11 , RESET_WAIT , SH11 , RESET_WAIT ,
NOP , AWAIT , NOP , AWAIT , NOP , AWAIT ,
NOP , AWAIT , SH11 , RESET_WAIT , SH11 , RESET_WAIT ,
SH11 , RESET_WAIT , SH11 , RESET_WAIT , NOP , AWAIT ,
NOP , AWAIT , NOP , AWAIT , NOP , AWAIT ,
SH11 , RESET_WAIT , SH11 , RESET_WAIT , SH11 , RESET_WAIT ,
SH11 , RESET_WAIT , NOP , AWAIT , NOP , AWAIT ,
NOP , AWAIT , NOP , AWAIT , SH11 , RESET_WAIT ,
SH11 , RESET_WAIT , SH11 , RESET_WAIT , SH11 , RESET_WAIT ,
NOP , AWAIT_BUSY , NOP , AWAIT_BUSY , NOP , AWAIT_BUSY ,
NOP , AWAIT_BUSY , SH11 , RESET_WAIT , SH11 , RESET_WAIT ,
SH11 , RESET_WAIT , SH11 , RESET_WAIT , NOP , AWAIT_BUSY ,
NOP , AWAIT_BUSY , NOP , AWAIT_BUSY , NOP , AWAIT_BUSY ,
SH11 , RESET_WAIT , SH11 , RESET_WAIT , SH11 , RESET_WAIT ,
SH11 , RESET_WAIT , NOP , AWAIT_BUSY , NOP , AWAIT_BUSY ,
NOP , AWAIT_BUSY , NOP , AWAIT_BUSY , SH11 , RESET_WAIT ,
SH11 , RESET_WAIT , SH11 , RESET_WAIT , SH11 , RESET_WAIT ,
NOP , AWAIT_BUSY , NOP , AWAIT_BUSY , NOP , AWAIT_BUSY ,
NOP , AWAIT_BUSY , SH11 , RESET_WAIT , SH11 , RESET_WAIT ,
SH11 , RESET_WAIT , SH11 , RESET_WAIT , NOP , AWAIT_REJECT ,
NOP , AWAIT_REJECT , NOP , AWAIT_REJECT , NOP , AWAIT_REJECT ,
SH11 , RESET_WAIT , SH11 , RESET_WAIT , SH11 , RESET_WAIT ,
SH11 , RESET_WAIT , NOP , AWAIT_REJECT , NOP , AWAIT_REJECT ,
NOP , AWAIT_REJECT , NOP , AWAIT_REJECT , SH11 , RESET_WAIT ,
SH11 , RESET_WAIT , SH11 , RESET_WAIT , SH11 , RESET_WAIT ,
NOP , AWAIT_REJECT , NOP , AWAIT_REJECT , NOP , AWAIT_REJECT ,
NOP , AWAIT_REJECT , SH11 , RESET_WAIT , SH11 , RESET_WAIT ,
SH11 , RESET_WAIT , SH11 , RESET_WAIT , NOP , AWAIT_REJECT ,
NOP , AWAIT_REJECT , NOP , AWAIT_REJECT , NOP , AWAIT_REJECT ,
SH11 , RESET_WAIT , SH11 , RESET_WAIT , SH11 , RESET_WAIT ,
SH11 , RESET_WAIT , SH11 , RESET_WAIT };
/transit/Makefile
0,0 → 1,13
include $(TOPDIR)/Rules.make
 
all: pdutr.h timertr.h
 
pdutr.h: pdutr.pre compile.awk
awk -f ./compile.awk pdutr.pre > pdutr.h
 
timertr.h: timertr.pre compile.awk
awk -f ./compile.awk timertr.pre > timertr.h
 
clean:
touch pdutr.h timertr.h
rm pdutr.h timertr.h
/fddi.c
0,0 → 1,166
/*
* INET An implementation of the TCP/IP protocol suite for the LINUX
* operating system. INET is implemented using the BSD Socket
* interface as the means of communication with the user level.
*
* FDDI-type device handling.
*
* Version: @(#)fddi.c 1.0.0 08/12/96
*
* Authors: Lawrence V. Stefani, <stefani@lkg.dec.com>
*
* fddi.c is based on previous eth.c and tr.c work by
* Ross Biro, <bir7@leland.Stanford.Edu>
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
* Mark Evans, <evansmp@uhura.aston.ac.uk>
* Florian La Roche, <rzsfl@rz.uni-sb.de>
* Alan Cox, <gw4pts@gw4pts.ampr.org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
* Changes
* Alan Cox : New arp/rebuild header
* Maciej W. Rozycki : IPv6 support
*/
#include <linux/config.h>
#include <asm/segment.h>
#include <asm/system.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/string.h>
#include <linux/mm.h>
#include <linux/socket.h>
#include <linux/in.h>
#include <linux/inet.h>
#include <linux/netdevice.h>
#include <linux/fddidevice.h>
#include <linux/if_ether.h>
#include <linux/skbuff.h>
#include <linux/errno.h>
#include <net/arp.h>
#include <net/sock.h>
 
/*
* Create the FDDI MAC header for an arbitrary protocol layer
*
* saddr=NULL means use device source address
* daddr=NULL means leave destination address (eg unresolved arp)
*/
 
int fddi_header(struct sk_buff *skb, struct net_device *dev, unsigned short type,
void *daddr, void *saddr, unsigned len)
{
int hl = FDDI_K_SNAP_HLEN;
struct fddihdr *fddi;
if(type != ETH_P_IP && type != ETH_P_IPV6 && type != ETH_P_ARP)
hl=FDDI_K_8022_HLEN-3;
fddi = (struct fddihdr *)skb_push(skb, hl);
fddi->fc = FDDI_FC_K_ASYNC_LLC_DEF;
if(type == ETH_P_IP || type == ETH_P_IPV6 || type == ETH_P_ARP)
{
fddi->hdr.llc_snap.dsap = FDDI_EXTENDED_SAP;
fddi->hdr.llc_snap.ssap = FDDI_EXTENDED_SAP;
fddi->hdr.llc_snap.ctrl = FDDI_UI_CMD;
fddi->hdr.llc_snap.oui[0] = 0x00;
fddi->hdr.llc_snap.oui[1] = 0x00;
fddi->hdr.llc_snap.oui[2] = 0x00;
fddi->hdr.llc_snap.ethertype = htons(type);
}
 
/* Set the source and destination hardware addresses */
if (saddr != NULL)
memcpy(fddi->saddr, saddr, dev->addr_len);
else
memcpy(fddi->saddr, dev->dev_addr, dev->addr_len);
 
if (daddr != NULL)
{
memcpy(fddi->daddr, daddr, dev->addr_len);
return(hl);
}
 
return(-hl);
}
 
 
/*
* Rebuild the FDDI MAC header. This is called after an ARP
* (or in future other address resolution) has completed on
* this sk_buff. We now let ARP fill in the other fields.
*/
int fddi_rebuild_header(struct sk_buff *skb)
{
struct fddihdr *fddi = (struct fddihdr *)skb->data;
 
#ifdef CONFIG_INET
if (fddi->hdr.llc_snap.ethertype == __constant_htons(ETH_P_IP))
/* Try to get ARP to resolve the header and fill destination address */
return arp_find(fddi->daddr, skb);
else
#endif
{
printk("%s: Don't know how to resolve type %02X addresses.\n",
skb->dev->name, htons(fddi->hdr.llc_snap.ethertype));
return(0);
}
}
 
 
/*
* Determine the packet's protocol ID and fill in skb fields.
* This routine is called before an incoming packet is passed
* up. It's used to fill in specific skb fields and to set
* the proper pointer to the start of packet data (skb->data).
*/
unsigned short fddi_type_trans(struct sk_buff *skb, struct net_device *dev)
{
struct fddihdr *fddi = (struct fddihdr *)skb->data;
unsigned short type;
/*
* Set mac.raw field to point to FC byte, set data field to point
* to start of packet data. Assume 802.2 SNAP frames for now.
*/
 
skb->mac.raw = skb->data; /* point to frame control (FC) */
if(fddi->hdr.llc_8022_1.dsap==0xe0)
{
skb_pull(skb, FDDI_K_8022_HLEN-3);
type = __constant_htons(ETH_P_802_2);
}
else
{
skb_pull(skb, FDDI_K_SNAP_HLEN); /* adjust for 21 byte header */
type=fddi->hdr.llc_snap.ethertype;
}
/* Set packet type based on destination address and flag settings */
if (*fddi->daddr & 0x01)
{
if (memcmp(fddi->daddr, dev->broadcast, FDDI_K_ALEN) == 0)
skb->pkt_type = PACKET_BROADCAST;
else
skb->pkt_type = PACKET_MULTICAST;
}
else if (dev->flags & IFF_PROMISC)
{
if (memcmp(fddi->daddr, dev->dev_addr, FDDI_K_ALEN))
skb->pkt_type = PACKET_OTHERHOST;
}
 
/* Assume 802.2 SNAP frames, for now */
 
return(type);
}
/hippi.c
0,0 → 1,154
/*
* INET An implementation of the TCP/IP protocol suite for the LINUX
* operating system. INET is implemented using the BSD Socket
* interface as the means of communication with the user level.
*
* HIPPI-type device handling.
*
* Version: @(#)hippi.c 1.0.0 05/29/97
*
* Authors: Ross Biro, <bir7@leland.Stanford.Edu>
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
* Mark Evans, <evansmp@uhura.aston.ac.uk>
* Florian La Roche, <rzsfl@rz.uni-sb.de>
* Alan Cox, <gw4pts@gw4pts.ampr.org>
* Jes Sorensen, <Jes.Sorensen@cern.ch>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*/
 
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/string.h>
#include <linux/mm.h>
#include <linux/socket.h>
#include <linux/in.h>
#include <linux/inet.h>
#include <linux/netdevice.h>
#include <linux/hippidevice.h>
#include <linux/skbuff.h>
#include <linux/errno.h>
#include <net/arp.h>
#include <net/sock.h>
#include <asm/uaccess.h>
#include <asm/checksum.h>
#include <asm/segment.h>
#include <asm/system.h>
 
/*
* hippi_net_init()
*
* Do nothing, this is just to pursuade the stupid linker to behave.
*/
 
void hippi_net_init(void)
{
return;
}
 
/*
* Create the HIPPI MAC header for an arbitrary protocol layer
*
* saddr=NULL means use device source address
* daddr=NULL means leave destination address (eg unresolved arp)
*/
 
int hippi_header(struct sk_buff *skb, struct net_device *dev,
unsigned short type, void *daddr, void *saddr,
unsigned len)
{
struct hippi_hdr *hip = (struct hippi_hdr *)skb_push(skb, HIPPI_HLEN);
 
if (!len){
len = skb->len - HIPPI_HLEN;
printk("hippi_header(): length not supplied\n");
}
 
/*
* Due to the stupidity of the little endian byte-order we
* have to set the fp field this way.
*/
hip->fp.fixed = __constant_htonl(0x04800018);
hip->fp.d2_size = htonl(len + 8);
hip->le.fc = 0;
hip->le.double_wide = 0; /* only HIPPI 800 for the time being */
hip->le.message_type = 0; /* Data PDU */
 
hip->le.dest_addr_type = 2; /* 12 bit SC address */
hip->le.src_addr_type = 2; /* 12 bit SC address */
 
memcpy(hip->le.src_switch_addr, dev->dev_addr + 3, 3);
memset(&hip->le.reserved, 0, 16);
 
hip->snap.dsap = HIPPI_EXTENDED_SAP;
hip->snap.ssap = HIPPI_EXTENDED_SAP;
hip->snap.ctrl = HIPPI_UI_CMD;
hip->snap.oui[0] = 0x00;
hip->snap.oui[1] = 0x00;
hip->snap.oui[2] = 0x00;
hip->snap.ethertype = htons(type);
 
if (daddr)
{
memcpy(hip->le.dest_switch_addr, daddr + 3, 3);
memcpy(&skb->private.ifield, daddr + 2, 4);
return HIPPI_HLEN;
}
return -((int)HIPPI_HLEN);
}
 
 
/*
* Rebuild the HIPPI MAC header. This is called after an ARP has
* completed on this sk_buff. We now let ARP fill in the other fields.
*/
 
int hippi_rebuild_header(struct sk_buff *skb)
{
struct hippi_hdr *hip = (struct hippi_hdr *)skb->data;
 
/*
* Only IP is currently supported
*/
if(hip->snap.ethertype != __constant_htons(ETH_P_IP))
{
printk(KERN_DEBUG "%s: unable to resolve type %X addresses.\n",skb->dev->name,ntohs(hip->snap.ethertype));
return 0;
}
 
/*
* We don't support dynamic ARP on HIPPI, but we use the ARP
* static ARP tables to hold the I-FIELDs.
*/
return arp_find(hip->le.daddr, skb);
}
 
 
/*
* Determine the packet's protocol ID.
*/
unsigned short hippi_type_trans(struct sk_buff *skb, struct net_device *dev)
{
struct hippi_hdr *hip;
hip = (struct hippi_hdr *) skb->data;
 
/*
* This is actually wrong ... question is if we really should
* set the raw address here.
*/
skb->mac.raw = skb->data;
skb_pull(skb, HIPPI_HLEN);
 
/*
* No fancy promisc stuff here now.
*/
 
return hip->snap.ethertype;
}
/cl2llc.c
0,0 → 1,615
/*
* NET An implementation of the IEEE 802.2 LLC protocol for the
* LINUX operating system. LLC is implemented as a set of
* state machines and callbacks for higher networking layers.
*
* Class 2 llc algorithm.
* Pseudocode interpreter, transition table lookup,
* data_request & indicate primitives...
*
* Code for initialization, termination, registration and
* MAC layer glue.
*
* Copyright Tim Alpaerts,
* <Tim_Alpaerts@toyota-motor-europe.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
* Changes
* Alan Cox : Chainsawed into Linux format
* Modified to use llc_ names
* Changed callbacks
*
* This file must be processed by sed before it can be compiled.
*/
 
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/netdevice.h>
#include <linux/skbuff.h>
#include <net/p8022.h>
#include <linux/proc_fs.h>
#include <linux/stat.h>
#include <asm/byteorder.h>
 
#include "pseudo/pseudocode.h"
#include "transit/pdutr.h"
#include "transit/timertr.h"
#include <net/llc_frame.h>
#include <net/llc.h>
 
/*
* Data_request() is called by the client to present a data unit
* to the llc for transmission.
* In the future this function should also check if the transmit window
* allows the sending of another pdu, and if not put the skb on the atq
* for deferred sending.
*/
 
int llc_data_request(llcptr lp, struct sk_buff *skb)
{
if (skb_headroom(skb) < (lp->dev->hard_header_len +4)){
printk("cl2llc: data_request() not enough headroom in skb\n");
return -1;
};
 
skb_push(skb, 4);
 
if ((lp->state != NORMAL) && (lp->state != BUSY) && (lp->state != REJECT))
{
printk("cl2llc: data_request() while no llc connection\n");
return -1;
}
 
if (lp->remote_busy)
{ /* if the remote llc is BUSY, */
ADD_TO_ATQ(skb); /* save skb in the await transmit queue */
return 0;
}
else
{
/*
* Else proceed with xmit
*/
 
switch(lp->state)
{
case NORMAL:
if(lp->p_flag)
llc_interpret_pseudo_code(lp, NORMAL2, skb, NO_FRAME);
else
llc_interpret_pseudo_code(lp, NORMAL1, skb, NO_FRAME);
break;
case BUSY:
if (lp->p_flag)
llc_interpret_pseudo_code(lp, BUSY2, skb, NO_FRAME);
else
llc_interpret_pseudo_code(lp, BUSY1, skb, NO_FRAME);
break;
case REJECT:
if (lp->p_flag)
llc_interpret_pseudo_code(lp, REJECT2, skb, NO_FRAME);
else
llc_interpret_pseudo_code(lp, REJECT1, skb, NO_FRAME);
break;
default:;
}
if(lp->llc_callbacks)
{
lp->llc_event(lp);
lp->llc_callbacks=0;
}
return 0;
}
}
 
 
 
/*
* Disconnect_request() requests that the llc to terminate a connection
*/
 
void disconnect_request(llcptr lp)
{
if ((lp->state == NORMAL) ||
(lp->state == BUSY) ||
(lp->state == REJECT) ||
(lp->state == AWAIT) ||
(lp->state == AWAIT_BUSY) ||
(lp->state == AWAIT_REJECT))
{
lp->state = D_CONN;
llc_interpret_pseudo_code(lp, SH1, NULL, NO_FRAME);
if(lp->llc_callbacks)
{
lp->llc_event(lp);
lp->llc_callbacks=0;
}
/*
* lp may be invalid after the callback
*/
}
}
 
 
/*
* Connect_request() requests that the llc to start a connection
*/
 
void connect_request(llcptr lp)
{
if (lp->state == ADM)
{
lp->state = SETUP;
llc_interpret_pseudo_code(lp, ADM1, NULL, NO_FRAME);
if(lp->llc_callbacks)
{
lp->llc_event(lp);
lp->llc_callbacks=0;
}
/*
* lp may be invalid after the callback
*/
}
}
 
 
/*
* Interpret_pseudo_code() executes the actions in the connection component
* state transition table. Table 4 in document on p88.
*
* If this function is called to handle an incoming pdu, skb will point
* to the buffer with the pdu and type will contain the decoded pdu type.
*
* If called by data_request skb points to an skb that was skb_alloc-ed by
* the llc client to hold the information unit to be transmitted, there is
* no valid type in this case.
*
* If called because a timer expired no skb is passed, and there is no
* type.
*/
 
void llc_interpret_pseudo_code(llcptr lp, int pc_label, struct sk_buff *skb,
char type)
{
short int pc; /* program counter in pseudo code array */
char p_flag_received;
frameptr fr;
int resend_count; /* number of pdus resend by llc_resend_ipdu() */
int ack_count; /* number of pdus acknowledged */
struct sk_buff *skb2;
 
if (skb != NULL)
{
fr = (frameptr) skb->data;
}
else
fr = NULL;
 
pc = pseudo_code_idx[pc_label];
while(pseudo_code[pc])
{
switch(pseudo_code[pc])
{
case 9:
if ((type != I_CMD) || (fr->i_hdr.i_pflag == 0))
break;
case 1:
lp->remote_busy = 0;
llc_stop_timer(lp, BUSY_TIMER);
if ((lp->state == NORMAL) ||
(lp->state == REJECT) ||
(lp->state == BUSY))
{
skb2 = llc_pull_from_atq(lp);
if (skb2 != NULL)
llc_start_timer(lp, ACK_TIMER);
while (skb2 != NULL)
{
llc_sendipdu( lp, I_CMD, 0, skb2);
skb2 = llc_pull_from_atq(lp);
}
}
break;
case 2:
lp->state = NORMAL; /* needed to eliminate connect_response() */
lp->llc_mode = MODE_ABM;
lp->llc_callbacks|=LLC_CONN_INDICATION;
break;
case 3:
lp->llc_mode = MODE_ABM;
lp->llc_callbacks|=LLC_CONN_CONFIRM;
break;
case 4:
skb_pull(skb, 4);
lp->inc_skb=skb;
lp->llc_callbacks|=LLC_DATA_INDIC;
break;
case 5:
lp->llc_mode = MODE_ADM;
lp->llc_callbacks|=LLC_DISC_INDICATION;
break;
case 70:
lp->llc_callbacks|=LLC_RESET_INDIC_LOC;
break;
case 71:
lp->llc_callbacks|=LLC_RESET_INDIC_REM;
break;
case 7:
lp->llc_callbacks|=LLC_RST_CONFIRM;
break;
case 66:
lp->llc_callbacks|=LLC_FRMR_RECV;
break;
case 67:
lp->llc_callbacks|=LLC_FRMR_SENT;
break;
case 68:
lp->llc_callbacks|=LLC_REMOTE_BUSY;
break;
case 69:
lp->llc_callbacks|=LLC_REMOTE_NOTBUSY;
break;
case 11:
llc_sendpdu(lp, DISC_CMD, lp->f_flag, 0, NULL);
break;
case 12:
llc_sendpdu(lp, DM_RSP, 0, 0, NULL);
break;
case 13:
lp->frmr_info_fld.cntl1 = fr->pdu_cntl.byte1;
lp->frmr_info_fld.cntl2 = fr->pdu_cntl.byte2;
lp->frmr_info_fld.vs = lp->vs;
lp->frmr_info_fld.vr_cr = lp->vr;
llc_sendpdu(lp, FRMR_RSP, 0, 5, (char *) &lp->frmr_info_fld);
break;
case 14:
llc_sendpdu(lp, FRMR_RSP, 0, 5, (char *) &lp->frmr_info_fld);
break;
case 15:
llc_sendpdu(lp, FRMR_RSP, lp->p_flag,
5, (char *) &lp->frmr_info_fld);
break;
case 16:
llc_sendipdu(lp, I_CMD, 1, skb);
break;
case 17:
resend_count = llc_resend_ipdu(lp, fr->i_hdr.nr, I_CMD, 1);
break;
case 18:
resend_count = llc_resend_ipdu(lp, fr->i_hdr.nr, I_CMD, 1);
if (resend_count == 0)
{
llc_sendpdu(lp, RR_CMD, 1, 0, NULL);
}
break;
case 19:
llc_sendipdu(lp, I_CMD, 0, skb);
break;
case 20:
resend_count = llc_resend_ipdu(lp, fr->i_hdr.nr, I_CMD, 0);
break;
case 21:
resend_count = llc_resend_ipdu(lp, fr->i_hdr.nr, I_CMD, 0);
if (resend_count == 0)
{
llc_sendpdu(lp, RR_CMD, 0, 0, NULL);
}
break;
case 22:
resend_count = llc_resend_ipdu(lp, fr->i_hdr.nr, I_RSP, 1);
break;
case 23:
llc_sendpdu(lp, REJ_CMD, 1, 0, NULL);
break;
case 24:
llc_sendpdu(lp, REJ_RSP, 1, 0, NULL);
break;
case 25:
if (IS_RSP(fr))
llc_sendpdu(lp, REJ_CMD, 0, 0, NULL);
else
llc_sendpdu(lp, REJ_RSP, 0, 0, NULL);
break;
case 26:
llc_sendpdu(lp, RNR_CMD, 1, 0, NULL);
break;
case 27:
llc_sendpdu(lp, RNR_RSP, 1, 0, NULL);
break;
case 28:
if (IS_RSP(fr))
llc_sendpdu(lp, RNR_CMD, 0, 0, NULL);
else
llc_sendpdu(lp, RNR_RSP, 0, 0, NULL);
break;
case 29:
if (lp->remote_busy == 0)
{
lp->remote_busy = 1;
llc_start_timer(lp, BUSY_TIMER);
lp->llc_callbacks|=LLC_REMOTE_BUSY;
}
else if (lp->timer_state[BUSY_TIMER] == TIMER_IDLE)
{
llc_start_timer(lp, BUSY_TIMER);
}
break;
case 30:
if (IS_RSP(fr))
llc_sendpdu(lp, RNR_CMD, 0, 0, NULL);
else
llc_sendpdu(lp, RNR_RSP, 0, 0, NULL);
break;
case 31:
llc_sendpdu(lp, RR_CMD, 1, 0, NULL);
break;
case 32:
llc_sendpdu(lp, RR_CMD, 1, 0, NULL);
break;
case 33:
llc_sendpdu(lp, RR_RSP, 1, 0, NULL);
break;
case 34:
llc_sendpdu(lp, RR_RSP, 1, 0, NULL);
break;
case 35:
llc_sendpdu(lp, RR_RSP, 0, 0, NULL);
break;
case 36:
if (IS_RSP(fr))
llc_sendpdu(lp, RR_CMD, 0, 0, NULL);
else
llc_sendpdu(lp, RR_RSP, 0, 0, NULL);
break;
case 37:
llc_sendpdu(lp, SABME_CMD, 0, 0, NULL);
lp->f_flag = 0;
break;
case 38:
llc_sendpdu(lp, UA_RSP, lp->f_flag, 0, NULL);
break;
case 39:
lp->s_flag = 0;
break;
case 40:
lp->s_flag = 1;
break;
case 41:
if(lp->timer_state[P_TIMER] == TIMER_RUNNING)
llc_stop_timer(lp, P_TIMER);
llc_start_timer(lp, P_TIMER);
if (lp->p_flag == 0)
{
lp->retry_count = 0;
lp->p_flag = 1;
}
break;
case 44:
if (lp->timer_state[ACK_TIMER] == TIMER_IDLE)
llc_start_timer(lp, ACK_TIMER);
break;
case 42:
llc_start_timer(lp, ACK_TIMER);
break;
case 43:
llc_start_timer(lp, REJ_TIMER);
break;
case 45:
llc_stop_timer(lp, ACK_TIMER);
break;
case 46:
llc_stop_timer(lp, ACK_TIMER);
lp->p_flag = 0;
break;
case 10:
if (lp->data_flag == 2)
llc_stop_timer(lp, REJ_TIMER);
break;
case 47:
llc_stop_timer(lp, REJ_TIMER);
break;
case 48:
llc_stop_timer(lp, ACK_TIMER);
llc_stop_timer(lp, P_TIMER);
llc_stop_timer(lp, REJ_TIMER);
llc_stop_timer(lp, BUSY_TIMER);
break;
case 49:
llc_stop_timer(lp, P_TIMER);
llc_stop_timer(lp, REJ_TIMER);
llc_stop_timer(lp, BUSY_TIMER);
break;
case 50:
ack_count = llc_free_acknowledged_skbs(lp,
(unsigned char) fr->s_hdr.nr);
if (ack_count > 0)
{
lp->retry_count = 0;
llc_stop_timer(lp, ACK_TIMER);
if (skb_peek(&lp->rtq) != NULL)
{
/*
* Re-transmit queue not empty
*/
llc_start_timer(lp, ACK_TIMER);
}
}
break;
case 51:
if (IS_UFRAME(fr))
p_flag_received = fr->u_hdr.u_pflag;
else
p_flag_received = fr->i_hdr.i_pflag;
if ((fr->pdu_hdr.ssap & 0x01) && (p_flag_received))
{
lp->p_flag = 0;
llc_stop_timer(lp, P_TIMER);
}
break;
case 52:
lp->data_flag = 2;
break;
case 53:
lp->data_flag = 0;
break;
case 54:
lp->data_flag = 1;
break;
case 55:
if (lp->data_flag == 0)
lp->data_flag = 1;
break;
case 56:
lp->p_flag = 0;
break;
case 57:
lp->p_flag = lp->f_flag;
break;
case 58:
lp->remote_busy = 0;
break;
case 59:
lp->retry_count = 0;
break;
case 60:
lp->retry_count++;
break;
case 61:
lp->vr = 0;
break;
case 62:
lp->vr++;
break;
case 63:
lp->vs = 0;
break;
case 64:
lp->vs = fr->i_hdr.nr;
break;
case 65:
if (IS_UFRAME(fr))
lp->f_flag = fr->u_hdr.u_pflag;
else
lp->f_flag = fr->i_hdr.i_pflag;
break;
default:;
}
pc++;
}
}
 
 
/*
* Process_otype2_frame will handle incoming frames
* for 802.2 Type 2 Procedure.
*/
 
void llc_process_otype2_frame(llcptr lp, struct sk_buff *skb, char type)
{
int idx; /* index in transition table */
int pc_label; /* action to perform, from tr tbl */
int validation; /* result of validate_seq_nos */
int p_flag_received; /* p_flag in received frame */
frameptr fr;
 
fr = (frameptr) skb->data;
 
if (IS_UFRAME(fr))
p_flag_received = fr->u_hdr.u_pflag;
else
p_flag_received = fr->i_hdr.i_pflag;
 
switch(lp->state)
{
/* Compute index in transition table: */
case ADM:
idx = type;
idx = (idx << 1) + p_flag_received;
break;
case CONN:
case RESET_WAIT:
case RESET_CHECK:
case ERROR:
idx = type;
break;
case SETUP:
case RESET:
case D_CONN:
idx = type;
idx = (idx << 1) + lp->p_flag;
break;
case NORMAL:
case BUSY:
case REJECT:
case AWAIT:
case AWAIT_BUSY:
case AWAIT_REJECT:
validation = llc_validate_seq_nos(lp, fr);
if (validation > 3)
type = BAD_FRAME;
idx = type;
idx = (idx << 1);
if (validation & 1)
idx = idx +1;
idx = (idx << 1) + p_flag_received;
idx = (idx << 1) + lp->p_flag;
default:
printk("llc_proc: bad state\n");
return;
}
idx = (idx << 1) + pdutr_offset[lp->state];
lp->state = pdutr_entry[idx +1];
pc_label = pdutr_entry[idx];
if (pc_label != 0)
{
llc_interpret_pseudo_code(lp, pc_label, skb, type);
if(lp->llc_callbacks)
{
lp->llc_event(lp);
lp->llc_callbacks=0;
}
/*
* lp may no longer be valid after this point. Be
* careful what is added!
*/
}
}
 
 
void llc_timer_expired(llcptr lp, int t)
{
int idx; /* index in transition table */
int pc_label; /* action to perform, from tr tbl */
 
lp->timer_state[t] = TIMER_EXPIRED;
idx = lp->state; /* Compute index in transition table: */
idx = (idx << 2) + t;
idx = idx << 1;
if (lp->retry_count >= lp->n2)
idx = idx + 1;
idx = (idx << 1) + lp->s_flag;
idx = (idx << 1) + lp->p_flag;
idx = idx << 1; /* 2 bytes per entry: action & newstate */
 
pc_label = timertr_entry[idx];
if (pc_label != 0)
{
llc_interpret_pseudo_code(lp, pc_label, NULL, NO_FRAME);
lp->state = timertr_entry[idx +1];
}
lp->timer_state[t] = TIMER_IDLE;
if(lp->llc_callbacks)
{
lp->llc_event(lp);
lp->llc_callbacks=0;
}
/*
* And lp may have vanished in the event callback
*/
}
 
/p8022.c
0,0 → 1,144
/*
* NET3: Support for 802.2 demultiplexing off Ethernet (Token ring
* is kept separate see p8022tr.c)
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
* Demultiplex 802.2 encoded protocols. We match the entry by the
* SSAP/DSAP pair and then deliver to the registered datalink that
* matches. The control byte is ignored and handling of such items
* is up to the routine passed the frame.
*
* Unlike the 802.3 datalink we have a list of 802.2 entries as there
* are multiple protocols to demux. The list is currently short (3 or
* 4 entries at most). The current demux assumes this.
*/
 
#include <linux/module.h>
#include <linux/netdevice.h>
#include <linux/skbuff.h>
#include <net/datalink.h>
#include <linux/mm.h>
#include <linux/in.h>
#include <linux/init.h>
#include <net/p8022.h>
 
static struct datalink_proto *p8022_list = NULL;
 
/*
* We don't handle the loopback SAP stuff, the extended
* 802.2 command set, multicast SAP identifiers and non UI
* frames. We have the absolute minimum needed for IPX,
* IP and Appletalk phase 2. See the llc_* routines for
* support libraries if your protocol needs these.
*/
 
static struct datalink_proto *find_8022_client(unsigned char type)
{
struct datalink_proto *proto;
 
for (proto = p8022_list;
((proto != NULL) && (*(proto->type) != type));
proto = proto->next)
;
 
return proto;
}
 
int p8022_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt)
{
struct datalink_proto *proto;
 
proto = find_8022_client(*(skb->h.raw));
if (proto != NULL)
{
skb->h.raw += 3;
skb->nh.raw += 3;
skb_pull(skb,3);
return proto->rcvfunc(skb, dev, pt);
}
 
skb->sk = NULL;
kfree_skb(skb);
return 0;
}
 
static void p8022_datalink_header(struct datalink_proto *dl,
struct sk_buff *skb, unsigned char *dest_node)
{
struct net_device *dev = skb->dev;
unsigned char *rawp;
 
rawp = skb_push(skb,3);
*rawp++ = dl->type[0];
*rawp++ = dl->type[0];
*rawp = 0x03; /* UI */
dev->hard_header(skb, dev, ETH_P_802_3, dest_node, NULL, skb->len);
}
 
static struct packet_type p8022_packet_type =
{
0, /* MUTTER ntohs(ETH_P_8022),*/
NULL, /* All devices */
p8022_rcv,
NULL,
NULL,
};
 
EXPORT_SYMBOL(register_8022_client);
EXPORT_SYMBOL(unregister_8022_client);
 
static int __init p8022_init(void)
{
p8022_packet_type.type=htons(ETH_P_802_2);
dev_add_pack(&p8022_packet_type);
return 0;
}
 
module_init(p8022_init);
 
struct datalink_proto *register_8022_client(unsigned char type, int (*rcvfunc)(struct sk_buff *, struct net_device *, struct packet_type *))
{
struct datalink_proto *proto;
 
if (find_8022_client(type) != NULL)
return NULL;
 
proto = (struct datalink_proto *) kmalloc(sizeof(*proto), GFP_ATOMIC);
if (proto != NULL) {
proto->type[0] = type;
proto->type_len = 1;
proto->rcvfunc = rcvfunc;
proto->header_length = 3;
proto->datalink_header = p8022_datalink_header;
proto->string_name = "802.2";
proto->next = p8022_list;
p8022_list = proto;
}
 
return proto;
}
 
void unregister_8022_client(unsigned char type)
{
struct datalink_proto *tmp, **clients = &p8022_list;
unsigned long flags;
 
save_flags(flags);
cli();
 
while ((tmp = *clients) != NULL)
{
if (tmp->type[0] == type) {
*clients = tmp->next;
kfree(tmp);
break;
} else {
clients = &tmp->next;
}
}
 
restore_flags(flags);
}
/p8023.c
0,0 → 1,62
/*
* NET3: 802.3 data link hooks used for IPX 802.3
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
* 802.3 isn't really a protocol data link layer. Some old IPX stuff
* uses it however. Note that there is only one 802.3 protocol layer
* in the system. We don't currently support different protocols
* running raw 802.3 on different devices. Thankfully nobody else
* has done anything like the old IPX.
*/
#include <linux/netdevice.h>
#include <linux/skbuff.h>
#include <net/datalink.h>
#include <linux/mm.h>
#include <linux/in.h>
 
/*
* Place an 802.3 header on a packet. The driver will do the mac
* addresses, we just need to give it the buffer length.
*/
static void p8023_datalink_header(struct datalink_proto *dl,
struct sk_buff *skb, unsigned char *dest_node)
{
struct net_device *dev = skb->dev;
dev->hard_header(skb, dev, ETH_P_802_3, dest_node, NULL, skb->len);
}
 
/*
* Create an 802.3 client. Note there can be only one 802.3 client
*/
struct datalink_proto *make_8023_client(void)
{
struct datalink_proto *proto;
 
proto = (struct datalink_proto *) kmalloc(sizeof(*proto), GFP_ATOMIC);
if (proto != NULL)
{
proto->type_len = 0;
proto->header_length = 0;
proto->datalink_header = p8023_datalink_header;
proto->string_name = "802.3";
}
return proto;
}
 
/*
* Destroy the 802.3 client.
*/
void destroy_8023_client(struct datalink_proto *dl)
{
if (dl)
kfree(dl);
}
 
/llc_macinit.c
0,0 → 1,214
/*
* NET An implementation of the IEEE 802.2 LLC protocol for the
* LINUX operating system. LLC is implemented as a set of
* state machines and callbacks for higher networking layers.
*
* Code for initialization, termination, registration and
* MAC layer glue.
*
* Written by Tim Alpaerts, Tim_Alpaerts@toyota-motor-europe.com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
* Changes
* Alan Cox : Chainsawed to Linux format
* Added llc_ to names
* Started restructuring handlers
*
* Horst von Brand : Add #include <linux/string.h>
*/
 
#include <linux/module.h>
#include <linux/version.h>
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/unistd.h>
#include <linux/string.h>
#include <linux/netdevice.h>
#include <linux/init.h>
#include <net/p8022.h>
 
#include <asm/byteorder.h>
 
#include <net/llc_frame.h>
#include <net/llc.h>
 
/*
* All incoming frames pass thru mac_data_indicate().
* On entry the llc structure related to the frame is passed as parameter.
* The received sk_buffs with pdus other than I_CMD and I_RSP
* are freed by mac_data_indicate() after processing,
* the I pdu buffers are freed by the cl2llc client when it no longer needs
* the skb.
*/
 
int llc_mac_data_indicate(llcptr lp, struct sk_buff *skb)
{
int ll; /* logical length == 802.3 length field */
unsigned char p_flag;
unsigned char type;
frameptr fr;
int free=1;
 
lp->inc_skb=NULL;
/*
* Truncate buffer to true 802.3 length
* [FIXME: move to 802.2 demux]
*/
 
ll = *(skb->data -2) * 256 + *(skb->data -1);
skb_trim( skb, ll );
 
fr = (frameptr) skb->data;
type = llc_decode_frametype( fr );
 
 
if (type <= FRMR_RSP)
{
/*
* PDU is of the type 2 set
*/
if ((lp->llc_mode == MODE_ABM)||(type == SABME_CMD))
llc_process_otype2_frame(lp, skb, type);
 
}
else
{
/*
* PDU belongs to type 1 set
*/
p_flag = fr->u_hdr.u_pflag;
switch(type)
{
case TEST_CMD:
llc_sendpdu(lp, TEST_RSP, 0,ll -3,
fr->u_hdr.u_info);
break;
case TEST_RSP:
lp->llc_callbacks|=LLC_TEST_INDICATION;
lp->inc_skb=skb;
free=0;
break;
case XID_CMD:
/*
* Basic format XID is handled by LLC itself
* Doc 5.4.1.1.2 p 48/49
*/
 
if ((ll == 6)&&(fr->u_hdr.u_info[0] == 0x81))
{
lp->k = fr->u_hdr.u_info[2];
llc_sendpdu(lp, XID_RSP,
fr->u_hdr.u_pflag, ll -3,
fr->u_hdr.u_info);
}
break;
 
case XID_RSP:
if( ll == 6 && fr->u_hdr.u_info[0] == 0x81 )
{
lp->k = fr->u_hdr.u_info[2];
}
lp->llc_callbacks|=LLC_XID_INDICATION;
lp->inc_skb=skb;
free=0;
break;
 
case UI_CMD:
lp->llc_callbacks|=LLC_UI_DATA;
skb_pull(skb,3);
lp->inc_skb=skb;
free=0;
break;
 
default:;
/*
* All other type 1 pdus ignored for now
*/
}
}
 
if (free&&(!(IS_IFRAME(fr))))
{
/*
* No auto free for I pdus
*/
skb->sk = NULL;
kfree_skb(skb);
}
 
if(lp->llc_callbacks)
{
if ( lp->llc_event != NULL ) lp->llc_event(lp);
lp->llc_callbacks=0;
}
return 0;
}
 
 
/*
* Create an LLC client. As it is the job of the caller to clean up
* LLC's on device down, the device list must be locked before this call.
*/
 
int register_cl2llc_client(llcptr lp, const char *device, void (*event)(llcptr), u8 *rmac, u8 ssap, u8 dsap)
{
char eye_init[] = "LLC\0";
 
memset(lp, 0, sizeof(*lp));
lp->dev = __dev_get_by_name(device);
if(lp->dev == NULL)
return -ENODEV;
memcpy(lp->eye, eye_init, sizeof(lp->eye));
lp->rw = 1;
lp->k = 127;
lp->n1 = 1490;
lp->n2 = 10;
lp->timer_interval[P_TIMER] = HZ; /* 1 sec */
lp->timer_interval[REJ_TIMER] = HZ/8;
lp->timer_interval[ACK_TIMER] = HZ/8;
lp->timer_interval[BUSY_TIMER] = HZ*2;
lp->local_sap = ssap;
lp->llc_event = event;
memcpy(lp->remote_mac, rmac, sizeof(lp->remote_mac));
lp->state = 0;
lp->llc_mode = MODE_ADM;
lp->remote_sap = dsap;
skb_queue_head_init(&lp->atq);
skb_queue_head_init(&lp->rtq);
MOD_INC_USE_COUNT;
return 0;
}
 
 
void unregister_cl2llc_client(llcptr lp)
{
llc_cancel_timers(lp);
MOD_DEC_USE_COUNT;
kfree(lp);
}
 
 
EXPORT_SYMBOL(register_cl2llc_client);
EXPORT_SYMBOL(unregister_cl2llc_client);
EXPORT_SYMBOL(llc_data_request);
EXPORT_SYMBOL(llc_unit_data_request);
EXPORT_SYMBOL(llc_test_request);
EXPORT_SYMBOL(llc_xid_request);
EXPORT_SYMBOL(llc_mac_data_indicate);
EXPORT_SYMBOL(llc_cancel_timers);
 
#define ALL_TYPES_8022 0
 
static int __init llc_init(void)
{
printk(KERN_NOTICE "IEEE 802.2 LLC for Linux 2.1 (c) 1996 Tim Alpaerts\n");
return 0;
}
 
 
module_init(llc_init);
/pseudo/pseudocode.h
0,0 → 1,287
 
/* this file generated on Thu Oct 24 11:42:35 GMT 1996 */
 
static char pseudo_code [ ] = {
0, 37, 57, 42, 59, 39, 0, 65, 38,
63, 61, 59, 56, 58, 2, 0, 12, 0,
12, 0, 0, 0, 12, 0, 65, 0, 5,
0, 0, 0, 37, 57, 42, 59, 0, 38,
63, 61, 59, 56, 58, 7, 0, 11, 57,
42, 59, 0, 12, 0, 5, 0, 40, 65,
0, 12, 5, 0, 0, 0, 38, 63, 61,
59, 56, 58, 0, 12, 0, 5, 0, 65,
0, 12, 5, 0, 0, 0, 38, 63, 61,
59, 40, 0, 45, 63, 61, 59, 51, 3,
58, 0, 56, 3, 58, 0, 12, 5, 45,
0, 5, 45, 0, 0, 0, 37, 57, 42,
60, 0, 5, 0, 38, 63, 61, 59, 40,
0, 45, 63, 61, 59, 51, 7, 58, 0,
56, 7, 58, 0, 12, 5, 45, 0, 5,
45, 0, 0, 0, 37, 57, 42, 60, 0,
5, 0, 12, 45, 0, 45, 0, 38, 0,
45, 0, 0, 0, 11, 57, 42, 60, 0,
0, 0, 71, 45, 65, 0, 38, 5, 45,
0, 5, 45, 0, 70, 45, 66, 39, 0,
15, 42, 0, 0, 0, 14, 42, 60, 0,
39, 70, 0, 11, 57, 42, 49, 59, 0,
37, 57, 42, 49, 59, 39, 0, 71, 65,
48, 0, 38, 5, 48, 0, 48, 70, 66,
39, 0, 5, 48, 0, 13, 67, 42, 49,
59, 0, 0, 67, 42, 49, 59, 0, 0,
67, 42, 49, 59, 0, 13, 67, 42, 49,
59, 0, 48, 70, 39, 0, 16, 41, 44,
0, 19, 44, 0, 26, 41, 53, 0, 28,
53, 0, 25, 50, 51, 43, 9, 0, 25,
50, 43, 0, 24, 50, 43, 0, 62, 32,
41, 50, 9, 4, 0, 62, 51, 36, 50,
9, 4, 0, 62, 36, 50, 4, 0, 62,
34, 50, 4, 0, 51, 50, 1, 0, 34,
50, 1, 0, 51, 50, 29, 0, 33, 50,
29, 0, 64, 50, 51, 20, 1, 0, 64,
50, 20, 1, 0, 64, 50, 22, 1, 0,
31, 41, 0, 56, 0, 31, 41, 60, 0,
16, 41, 44, 0, 19, 44, 0, 23, 43,
41, 0, 25, 43, 0, 31, 41, 35, 0,
35, 0, 31, 41, 35, 0, 35, 0, 30,
51, 50, 55, 9, 0, 30, 50, 55, 0,
27, 50, 55, 0, 27, 50, 10, 54, 0,
30, 51, 50, 10, 54, 9, 0, 30, 50,
10, 54, 0, 51, 50, 1, 0, 27, 50,
1, 0, 51, 50, 29, 0, 27, 50, 29,
0, 64, 50, 51, 20, 1, 0, 64, 50,
20, 1, 0, 64, 50, 27, 20, 1, 0,
26, 41, 0, 56, 0, 26, 41, 60, 0,
54, 0, 54, 0, 16, 41, 44, 0, 19,
44, 0, 26, 41, 52, 0, 28, 52, 0,
50, 51, 9, 0, 33, 50, 0, 62, 32,
41, 50, 9, 47, 4, 0, 62, 36, 50,
47, 4, 0, 62, 34, 50, 47, 4, 0,
51, 50, 1, 0, 34, 50, 1, 0, 51,
50, 29, 0, 33, 50, 29, 0, 64, 50,
51, 20, 1, 0, 64, 50, 20, 1, 0,
64, 50, 22, 1, 0, 31, 41, 0, 23,
41, 43, 60, 0, 56, 0, 31, 41, 43,
60, 0, 28, 53, 0, 25, 50, 64, 46,
20, 43, 1, 0, 25, 50, 43, 0, 24,
50, 43, 0, 62, 50, 64, 18, 41, 1,
4, 0, 62, 35, 50, 4, 0, 62, 33,
50, 4, 0, 50, 64, 46, 20, 1, 0,
50, 1, 0, 33, 50, 1, 0, 50, 64,
46, 29, 0, 50, 29, 0, 33, 50, 29,
0, 31, 41, 60, 0, 25, 43, 0, 35,
0, 35, 0, 30, 50, 64, 46, 54, 1,
20, 0, 30, 50, 54, 0, 27, 50, 54,
0, 30, 50, 64, 54, 46, 1, 20, 0,
30, 50, 54, 0, 27, 50, 54, 0, 50,
64, 46, 20, 1, 0, 50, 1, 0, 27,
50, 1, 0, 50, 64, 46, 29, 0, 50,
29, 0, 27, 50, 29, 0, 26, 41, 60,
0, 28, 52, 0, 50, 0, 33, 50, 0,
62, 50, 64, 18, 41, 47, 1, 4, 0,
62, 35, 47, 50, 4, 0, 62, 33, 47,
50, 4, 0, 50, 64, 46, 20, 1, 0,
50, 1, 0, 33, 50, 1, 0, 50, 64,
46, 29, 0, 50, 29, 0, 33, 50, 29,
0, 23, 41, 60, 0
};
 
static short int pseudo_code_idx [ ] ={
0, 1, 7, 16, 18, 20, 22, 24, 26,
28, 30, 35, 43, 48, 50, 52, 55, 58,
60, 67, 69, 71, 73, 76, 78, 84, 92,
96, 100, 103, 105, 110, 112, 118, 126, 130,
134, 137, 139, 144, 146, 149, 151, 153, 155,
157, 162, 164, 168, 172, 175, 180, 183, 185,
189, 192, 198, 205, 209, 213, 218, 221, 227,
233, 239, 245, 249, 253, 256, 260, 263, 269,
273, 277, 284, 291, 296, 301, 305, 309, 313,
317, 323, 328, 333, 336, 338, 342, 346, 349,
353, 356, 360, 362, 366, 368, 374, 378, 382,
387, 394, 399, 403, 407, 411, 415, 421, 426,
432, 435, 437, 441, 443, 445, 449, 452, 456,
459, 463, 466, 474, 480, 486, 490, 494, 498,
502, 508, 513, 518, 521, 526, 528, 533, 536,
544, 548, 552, 560, 565, 570, 576, 579, 583,
588, 591, 595, 599, 602, 604, 606, 614, 618,
622, 630, 634, 638, 644, 647, 651, 656, 659,
663, 667, 670, 672, 675, 684, 690, 696, 702,
705, 709, 714, 717, 721, 0
};
 
#define NOP 0
#define ADM1 1
#define ADM2 2
#define ADM3 3
#define ADM4 4
#define ADM5 5
#define CONN2 6
#define CONN3 7
#define CONN4 8
#define CONN5 9
#define RESWAIT1 10
#define RESWAIT2 11
#define RESWAIT3 12
#define RESWAIT4 13
#define RESWAIT5 14
#define RESWAIT6 15
#define RESWAIT7 16
#define RESWAIT8 17
#define RESCHK1 18
#define RESCHK2 19
#define RESCHK3 20
#define RESCHK4 21
#define RESCHK5 22
#define RESCHK6 23
#define SETUP1 24
#define SETUP2 25
#define SETUP3 26
#define SETUP4 27
#define SETUP5 28
#define SETUP6 29
#define SETUP7 30
#define SETUP8 31
#define RESET1 32
#define RESET2 33
#define RESET3 34
#define RESET4 35
#define RESET5 36
#define RESET6 37
#define RESET7 38
#define RESET8 39
#define D_CONN1 40
#define D_CONN2 41
#define D_CONN3 42
#define D_CONN4 43
#define D_CONN5 44
#define D_CONN6 45
#define D_CONN7 46
#define ERR1 47
#define ERR2 48
#define ERR3 49
#define ERR4 50
#define ERR5 51
#define ERR6 52
#define ERR7 53
#define ERR8 54
#define SH1 55
#define SH2 56
#define SH3 57
#define SH4 58
#define SH5 59
#define SH6 60
#define SH7 61
#define SH8 62
#define SH9 63
#define SH10 64
#define SH11 65
#define NORMAL1 66
#define NORMAL2 67
#define NORMAL3 68
#define NORMAL4 69
#define NORMAL5 70
#define NORMAL6 71
#define NORMAL7 72
#define NORMAL8A 73
#define NORMAL8B 74
#define NORMAL9 75
#define NORMAL10 76
#define NORMAL11 77
#define NORMAL12 78
#define NORMAL13 79
#define NORMAL14 80
#define NORMAL15 81
#define NORMAL16 82
#define NORMAL17 83
#define NORMAL18 84
#define NORMAL19 85
#define NORMAL20 86
#define BUSY1 87
#define BUSY2 88
#define BUSY3 89
#define BUSY4 90
#define BUSY5 91
#define BUSY6 92
#define BUSY7 93
#define BUSY8 94
#define BUSY9 95
#define BUSY10 96
#define BUSY11 97
#define BUSY12 98
#define BUSY13 99
#define BUSY14 100
#define BUSY15 101
#define BUSY16 102
#define BUSY17 103
#define BUSY18 104
#define BUSY19 105
#define BUSY20 106
#define BUSY21 107
#define BUSY22 108
#define BUSY23 109
#define BUSY24 110
#define BUSY25 111
#define BUSY26 112
#define REJECT1 113
#define REJECT2 114
#define REJECT3 115
#define REJECT4 116
#define REJECT5 117
#define REJECT6 118
#define REJECT7 119
#define REJECT8 120
#define REJECT9 121
#define REJECT10 122
#define REJECT11 123
#define REJECT12 124
#define REJECT13 125
#define REJECT14 126
#define REJECT15 127
#define REJECT16 128
#define REJECT17 129
#define REJECT18 130
#define REJECT19 131
#define REJECT20 132
#define AWAIT1 133
#define AWAIT2 134
#define AWAIT3 135
#define AWAIT4 136
#define AWAIT5 137
#define AWAIT6 138
#define AWAIT7 139
#define AWAIT8 140
#define AWAIT9 141
#define AWAIT10 142
#define AWAIT11 143
#define AWAIT12 144
#define AWAIT13 145
#define AWAIT14 146
#define AWAIT_BUSY1 147
#define AWAIT_BUSY2 148
#define AWAIT_BUSY3 149
#define AWAIT_BUSY4 150
#define AWAIT_BUSY5 151
#define AWAIT_BUSY6 152
#define AWAIT_BUSY7 153
#define AWAIT_BUSY8 154
#define AWAIT_BUSY9 155
#define AWAIT_BUSY10 156
#define AWAIT_BUSY11 157
#define AWAIT_BUSY12 158
#define AWAIT_BUSY13 159
#define AWAIT_BUSY14 160
#define AWAIT_BUSY15 161
#define AWAIT_BUSY16 162
#define AWAIT_REJECT1 163
#define AWAIT_REJECT2 164
#define AWAIT_REJECT3 165
#define AWAIT_REJECT4 166
#define AWAIT_REJECT5 167
#define AWAIT_REJECT6 168
#define AWAIT_REJECT7 169
#define AWAIT_REJECT8 170
#define AWAIT_REJECT9 171
#define AWAIT_REJECT10 172
#define AWAIT_REJECT11 173
#define AWAIT_REJECT12 174
#define AWAIT_REJECT13 175
 
/pseudo/opcd2num.sed
0,0 → 1,72
s/NOP/0/
s/DUMMY_6/6/
s/DUMMY_8/8/
s/IF_F=1_CLEAR_REMOTE_BUSY/9/
s/CLEAR_REMOTE_BUSY/1/
s/CONNECT_CONFIRM/3/
s/DISCONNECT_INDICATION/5/
s/CONNECT_INDICATION/2/
s/IF_DATA_FLAG_=0_THEN_DATA_FLAG:=1/55/
s/DATA_FLAG:=0/53/
s/DATA_FLAG:=1/54/
s/DATA_FLAG:=2/52/
s/DATA_INDICATION/4/
s/F_FLAG:=P/65/
s/IF_DATA_FLAG=2_STOP_REJ_TIMER/10/
s/OPTIONAL_SEND_RNR_XXX(X=0)/30/
s/P_FLAG:=0/56/
s/P_FLAG:=P/57/
s/RE-SEND_FRMR_RSP(F=0)/14/
s/RE-SEND_FRMR_RSP(F=P)/15/
s/RE-SEND_I_CMD(P=1)_OR_SEND_RR/18/
s/RE-SEND_I_CMD(P=1)/17/
s/RE-SEND_I_RSP(F=1)/22/
s/RE-SEND_I_XXX(X=0)_OR_SEND_RR/21/
s/RE-SEND_I_XXX(X=0)/20/
s/REMOTE_BUSY:=0/58/
s/REPORT_STATUS(FRMR_RECEIVED)/66/
s/REPORT_STATUS(FRMR_SENT)/67/
s/REPORT_STATUS(REMOTE_BUSY)/68/
s/REPORT_STATUS(REMOTE_NOT_BUSY)/69/
s/RESET_CONFIRM/7/
s/RESET_INDICATION(LOCAL)/70/
s/RESET_INDICATION(REMOTE)/71/
s/RETRY_COUNT:=RETRY_COUNT+1/60/
s/RETRY_COUNT:=0/59/
s/SEND_ACKNOWLEDGE_CMD(P=1)/32/
s/SEND_ACKNOWLEDGE_RSP(F=1)/34/
s/SEND_ACKNOWLEDGE_XXX(X=0)/36/
s/SEND_DISC_CMD(P=X)/11/
s/SEND_DM_RSP(F=X)/12/
s/SEND_FRMR_RSP(F=X)/13/
s/SEND_I_CMD(P=1)/16/
s/SEND_I_XXX(X=0)/19/
s/SEND_REJ_CMD(P=1)/23/
s/SEND_REJ_RSP(F=1)/24/
s/SEND_REJ_XXX(X=0)/25/
s/SEND_RNR_CMD(F=1)/26/
s/SEND_RNR_RSP(F=1)/27/
s/SEND_RNR_XXX(X=0)/28/
s/SEND_RR_CMD(P=1)/31/
s/SEND_RR_RSP(F=1)/33/
s/SEND_RR_XXX(X=0)/35/
s/SEND_SABME_CMD(P=X)/37/
s/SEND_UA_RSP(F=X)/38/
s/SET_REMOTE_BUSY/29/
s/START_ACK_TIMER_IF_NOT_RUNNING/44/
s/START_ACK_TIMER/42/
s/START_P_TIMER/41/
s/START_REJ_TIMER/43/
s/STOP_ACK_TIMER/45/
s/STOP_ALL_TIMERS/48/
s/STOP_OTHER_TIMERS/49/
s/STOP_P_TIMER/46/
s/STOP_REJ_TIMER/47/
s/S_FLAG:=0/39/
s/S_FLAG:=1/40/
s/UPDATE_N(R)_RECEIVED/50/
s/UPDATE_P_FLAG/51/
s/V(R):=0/61/
s/V(R):=V(R)+1/62/
s/V(S):=0/63/
s/V(S):=N(R)/64/
/pseudo/actionnm.awk
0,0 → 1,27
# usage: awk -f actionnm.awk pseudocode.h
#
BEGIN { "date" | getline
today = $0
printf("\n/* this file generated on %s */\n", today )
printf("\nstatic char *action_names[] = { \n " )
opl = 0
}
 
/^#define/ {
if ( opl > 3 ) {
printf("\n ")
opl = 0
}
opl = opl +1
t = sprintf("\"%s\"", $2 )
printf("%-15s ,", t )
# printf("%-10s", $2 )
}
 
END {
if ( opl > 3 ) {
printf("\n ")
}
printf("\t 0\n};\n\n")
}
 
/pseudo/compile.awk
0,0 → 1,57
# usage: cat pseudocode | sed -f act2num | awk -f compile.awk
#
#
BEGIN { "date" | getline
today = $0
printf("\n/* this file generated on %s */\n", today )
printf("\nstatic char pseudo_code [ ] = { \n" )
opl = 0 # op codes on the current line
 
opc = 0 # opcode counter
fpi = 0 # fill pointer for idx array
}
 
/^;/ { } # line starting with semicolon is comment
 
/^[A-Z]/ { # start of a new action
emit( 0 )
idx[ ++fpi ] = opc
name[ fpi ] = $1
emit( $2 )
}
 
/^[\t ]/ {
emit( $1 )
}
 
END {
if ( opl > 8 ) {
printf("\n")
}
printf("\t 0\n};\n\n")
printf("static short int pseudo_code_idx [ ] ={\n")
opl = 0
emit( 0 )
for( ii = 1; ii <= fpi; ii++ )
emit( idx[ ii ] )
if ( opl > 8 ) {
printf("\n")
}
printf("\t 0\n};\n\n")
 
printf("#define %-10s \t %3d \n", "NOP", 0 )
for( ii = 1; ii <= fpi; ii++ )
printf("#define %-10s \t %3d \n", name[ ii ], ii )
printf("\n")
}
 
function emit( opcode ){ # Niclaus Wirth
if ( opl > 8 ) {
printf("\n")
opl = 0
}
opl = opl +1
printf("\t%4d,", opcode )
opc++
}
 
/pseudo/pseudocode
0,0 → 1,780
;============================================================================
;
; translate this with
; cat pseudocode | sed -f act2num | awk -f compile.awk >pseudocode.h
;
; actionname pseudocode
;
;============================================================================
ADM1 SEND_SABME_CMD(P=X)
P_FLAG:=P
START_ACK_TIMER
RETRY_COUNT:=0
S_FLAG:=0
;
; instructions in ADM2 have been changed:
; 1. P_FLAG:=P is probably wrong in doc...
; I think it should be F_FLAG:=P the way it is in CONN3
; 2. CONNECT_RESPONSE has been wired in here,
; CONN1 is no longer referenced
;
ADM2 F_FLAG:=P
SEND_UA_RSP(F=X)
V(S):=0
V(R):=0
RETRY_COUNT:=0
P_FLAG:=0
REMOTE_BUSY:=0
CONNECT_INDICATION
ADM3 SEND_DM_RSP(F=X)
ADM4 SEND_DM_RSP(F=X)
ADM5 NOP
;============================================================================
;CONN1 SEND_UA_RSP(F=X)
; V(S):=0
; V(R):=0
; RETRY_COUNT:=0
; P_FLAG:=0
; REMOTE_BUSY:=0
CONN2 SEND_DM_RSP(F=X)
CONN3 F_FLAG:=P
CONN4 DISCONNECT_INDICATION
CONN5 NOP
;============================================================================
RESWAIT1 SEND_SABME_CMD(P=X)
P_FLAG:=P
START_ACK_TIMER
RETRY_COUNT:=0
RESWAIT2 SEND_UA_RSP(F=X)
V(S):=0
V(R):=0
RETRY_COUNT:=0
P_FLAG:=0
REMOTE_BUSY:=0
RESET_CONFIRM
RESWAIT3 SEND_DISC_CMD(P=X)
P_FLAG:=P
START_ACK_TIMER
RETRY_COUNT:=0
RESWAIT4 SEND_DM_RSP(F=X)
RESWAIT5 DISCONNECT_INDICATION
RESWAIT6 S_FLAG:=1
F_FLAG:=P
RESWAIT7 SEND_DM_RSP(F=X)
DISCONNECT_INDICATION
RESWAIT8 NOP
;============================================================================
RESCHK1 SEND_UA_RSP(F=X)
V(S):=0
V(R):=0
RETRY_COUNT:=0
P_FLAG:=0
REMOTE_BUSY:=0
RESCHK2 SEND_DM_RSP(F=X)
RESCHK3 DISCONNECT_INDICATION
RESCHK4 F_FLAG:=P
RESCHK5 SEND_DM_RSP(F=X)
DISCONNECT_INDICATION
RESCHK6 NOP
;============================================================================
SETUP1 SEND_UA_RSP(F=X)
V(S):=0
V(R):=0
RETRY_COUNT:=0
S_FLAG:=1
SETUP2 STOP_ACK_TIMER
V(S):=0
V(R):=0
RETRY_COUNT:=0
UPDATE_P_FLAG
CONNECT_CONFIRM
REMOTE_BUSY:=0
SETUP3 P_FLAG:=0
CONNECT_CONFIRM
REMOTE_BUSY:=0
SETUP4 SEND_DM_RSP(F=X)
DISCONNECT_INDICATION
STOP_ACK_TIMER
SETUP5 DISCONNECT_INDICATION
STOP_ACK_TIMER
SETUP6 NOP
SETUP7 SEND_SABME_CMD(P=X)
P_FLAG:=P
START_ACK_TIMER
RETRY_COUNT:=RETRY_COUNT+1
SETUP8 DISCONNECT_INDICATION
;============================================================================
RESET1 SEND_UA_RSP(F=X)
V(S):=0
V(R):=0
RETRY_COUNT:=0
S_FLAG:=1
RESET2 STOP_ACK_TIMER
V(S):=0
V(R):=0
RETRY_COUNT:=0
UPDATE_P_FLAG
RESET_CONFIRM
REMOTE_BUSY:=0
RESET3 P_FLAG:=0
RESET_CONFIRM
REMOTE_BUSY:=0
RESET4 SEND_DM_RSP(F=X)
DISCONNECT_INDICATION
STOP_ACK_TIMER
RESET5 DISCONNECT_INDICATION
STOP_ACK_TIMER
RESET6 NOP
RESET7 SEND_SABME_CMD(P=X)
P_FLAG:=P
START_ACK_TIMER
RETRY_COUNT:=RETRY_COUNT+1
RESET8 DISCONNECT_INDICATION
;============================================================================
D_CONN1 SEND_DM_RSP(F=X)
STOP_ACK_TIMER
D_CONN2 STOP_ACK_TIMER
D_CONN3 SEND_UA_RSP(F=X)
D_CONN4 STOP_ACK_TIMER
D_CONN5 NOP
D_CONN6 SEND_DISC_CMD(P=X)
P_FLAG:=P
START_ACK_TIMER
RETRY_COUNT:=RETRY_COUNT+1
D_CONN7 NOP
;============================================================================
ERR1 RESET_INDICATION(REMOTE)
STOP_ACK_TIMER
F_FLAG:=P
ERR2 SEND_UA_RSP(F=X)
DISCONNECT_INDICATION
STOP_ACK_TIMER
ERR3 DISCONNECT_INDICATION
STOP_ACK_TIMER
ERR4 RESET_INDICATION(LOCAL)
STOP_ACK_TIMER
REPORT_STATUS(FRMR_RECEIVED)
S_FLAG:=0
ERR5 RE-SEND_FRMR_RSP(F=P)
START_ACK_TIMER
ERR6 NOP
ERR7 RE-SEND_FRMR_RSP(F=0)
START_ACK_TIMER
RETRY_COUNT:=RETRY_COUNT+1
ERR8 S_FLAG:=0
RESET_INDICATION(LOCAL)
;============================================================================
; the shared actions are common to states NORMAL, BUSY, REJECT,
; AWAIT, AWAIT_BUSY and AWAIT_REJECT.
;============================================================================
SH1 SEND_DISC_CMD(P=X)
P_FLAG:=P
START_ACK_TIMER
STOP_OTHER_TIMERS
RETRY_COUNT:=0
SH2 SEND_SABME_CMD(P=X)
P_FLAG:=P
START_ACK_TIMER
STOP_OTHER_TIMERS
RETRY_COUNT:=0
S_FLAG:=0
SH3 RESET_INDICATION(REMOTE)
F_FLAG:=P
STOP_ALL_TIMERS
SH4 SEND_UA_RSP(F=X)
DISCONNECT_INDICATION
STOP_ALL_TIMERS
SH5 STOP_ALL_TIMERS
RESET_INDICATION(LOCAL)
REPORT_STATUS(FRMR_RECEIVED)
S_FLAG:=0
SH6 DISCONNECT_INDICATION
STOP_ALL_TIMERS
SH7 SEND_FRMR_RSP(F=X)
REPORT_STATUS(FRMR_SENT)
START_ACK_TIMER
STOP_OTHER_TIMERS
RETRY_COUNT:=0
SH8 SEND_FRMR_RSP(F=0)
REPORT_STATUS(FRMR_SENT)
START_ACK_TIMER
STOP_OTHER_TIMERS
RETRY_COUNT:=0
SH9 SEND_FRMR_RSP(F=0)
REPORT_STATUS(FRMR_SENT)
START_ACK_TIMER
STOP_OTHER_TIMERS
RETRY_COUNT:=0
SH10 SEND_FRMR_RSP(F=X)
REPORT_STATUS(FRMR_SENT)
START_ACK_TIMER
STOP_OTHER_TIMERS
RETRY_COUNT:=0
SH11 STOP_ALL_TIMERS
RESET_INDICATION(LOCAL)
S_FLAG:=0
;============================================================================
NORMAL1 SEND_I_CMD(P=1)
START_P_TIMER
START_ACK_TIMER_IF_NOT_RUNNING
; SEND_I_XXX(X=0)
; START_ACK_TIMER_IF_NOT_RUNNING
NORMAL2 SEND_I_XXX(X=0)
START_ACK_TIMER_IF_NOT_RUNNING
NORMAL3 SEND_RNR_CMD(F=1)
START_P_TIMER
DATA_FLAG:=0
; SEND_RNR_XXX(X=0)
; DATA_FLAG:=0
NORMAL4 SEND_RNR_XXX(X=0)
DATA_FLAG:=0
NORMAL5 SEND_REJ_XXX(X=0)
UPDATE_N(R)_RECEIVED
UPDATE_P_FLAG
START_REJ_TIMER
IF_F=1_CLEAR_REMOTE_BUSY
; SEND_REJ_CMD(P=1)
; UPDATE_N(R)_RECEIVED
; START_P_TIMER
; START_REJ_TIMER
; IF_F=1_CLEAR_REMOTE_BUSY
NORMAL6 SEND_REJ_XXX(X=0)
UPDATE_N(R)_RECEIVED
START_REJ_TIMER
NORMAL7 SEND_REJ_RSP(F=1)
UPDATE_N(R)_RECEIVED
START_REJ_TIMER
;
; the order of opcodes in NORMAL8 is changed.
; the transition table will execute NORMAL8A for incoming pdus
; with p/f 1, pdus with pf 0 are treated in NORMAL8B.
;
NORMAL8A V(R):=V(R)+1
SEND_ACKNOWLEDGE_CMD(P=1)
START_P_TIMER
UPDATE_N(R)_RECEIVED
IF_F=1_CLEAR_REMOTE_BUSY
DATA_INDICATION
;
NORMAL8B V(R):=V(R)+1
UPDATE_P_FLAG
SEND_ACKNOWLEDGE_XXX(X=0)
UPDATE_N(R)_RECEIVED
IF_F=1_CLEAR_REMOTE_BUSY
DATA_INDICATION
;
; the order of opcodes in NORMAL9 is changed
NORMAL9 V(R):=V(R)+1
SEND_ACKNOWLEDGE_XXX(X=0)
UPDATE_N(R)_RECEIVED
DATA_INDICATION
;
; the order of opcodes in NORMAL10 is changed
NORMAL10 V(R):=V(R)+1
SEND_ACKNOWLEDGE_RSP(F=1)
UPDATE_N(R)_RECEIVED
DATA_INDICATION
NORMAL11 UPDATE_P_FLAG
UPDATE_N(R)_RECEIVED
CLEAR_REMOTE_BUSY
NORMAL12 SEND_ACKNOWLEDGE_RSP(F=1)
UPDATE_N(R)_RECEIVED
CLEAR_REMOTE_BUSY
NORMAL13 UPDATE_P_FLAG
UPDATE_N(R)_RECEIVED
SET_REMOTE_BUSY
NORMAL14 SEND_RR_RSP(F=1)
UPDATE_N(R)_RECEIVED
SET_REMOTE_BUSY
NORMAL15 V(S):=N(R)
UPDATE_N(R)_RECEIVED
UPDATE_P_FLAG
RE-SEND_I_XXX(X=0)
CLEAR_REMOTE_BUSY
; V(S):=N(R)
; UPDATE_N(R)_RECEIVED
; START_P_TIMER
; RE-SEND_I_CMD(P=1)
; CLEAR_REMOTE_BUSY
NORMAL16 V(S):=N(R)
UPDATE_N(R)_RECEIVED
RE-SEND_I_XXX(X=0)
CLEAR_REMOTE_BUSY
NORMAL17 V(S):=N(R)
UPDATE_N(R)_RECEIVED
RE-SEND_I_RSP(F=1)
CLEAR_REMOTE_BUSY
NORMAL18 SEND_RR_CMD(P=1)
START_P_TIMER
NORMAL19 P_FLAG:=0
; SEND_RR_CMD(P=1)
; START_P_TIMER
; RETRY_COUNT:=RETRY_COUNT+1
NORMAL20 SEND_RR_CMD(P=1)
START_P_TIMER
RETRY_COUNT:=RETRY_COUNT+1
;============================================================================
BUSY1 SEND_I_CMD(P=1)
START_P_TIMER
START_ACK_TIMER_IF_NOT_RUNNING
; SEND_I_XXX(X=0)
; START_ACK_TIMER_IF_NOT_RUNNING
BUSY2 SEND_I_XXX(X=0)
START_ACK_TIMER_IF_NOT_RUNNING
BUSY3 SEND_REJ_CMD(P=1)
START_REJ_TIMER
START_P_TIMER
; SEND_REJ_XXX(X=0)
; START_REJ_TIMER
BUSY4 SEND_REJ_XXX(X=0)
START_REJ_TIMER
BUSY5 SEND_RR_CMD(P=1)
START_P_TIMER
SEND_RR_XXX(X=0)
BUSY6 SEND_RR_XXX(X=0)
BUSY7 SEND_RR_CMD(P=1)
START_P_TIMER
SEND_RR_XXX(X=0)
BUSY8 SEND_RR_XXX(X=0)
BUSY9 OPTIONAL_SEND_RNR_XXX(X=0)
UPDATE_P_FLAG
UPDATE_N(R)_RECEIVED
IF_DATA_FLAG_=0_THEN_DATA_FLAG:=1
IF_F=1_CLEAR_REMOTE_BUSY
; SEND_RNR_CMD(P=1)
; START_P_TIMER
; UPDATE_N(R)_RECEIVED
; IF_DATA_FLAG_=0_THEN_DATA_FLAG:=1
; IF_F=1_CLEAR_REMOTE_BUSY
BUSY10 OPTIONAL_SEND_RNR_XXX(X=0)
UPDATE_N(R)_RECEIVED
IF_DATA_FLAG_=0_THEN_DATA_FLAG:=1
BUSY11 SEND_RNR_RSP(F=1)
UPDATE_N(R)_RECEIVED
IF_DATA_FLAG_=0_THEN_DATA_FLAG:=1
BUSY12 SEND_RNR_RSP(F=1)
UPDATE_N(R)_RECEIVED
IF_DATA_FLAG=2_STOP_REJ_TIMER
DATA_FLAG:=1
; V(R):=V(R)+1
; DATA_INDICATION
; SEND_RNR_RSP(F=1)
; UPDATE_N(R)_RECEIVED
; IF_DATA_FLAG=2_STOP_REJ_TIMER
; DATA_FLAG:=0
BUSY13 OPTIONAL_SEND_RNR_XXX(X=0)
UPDATE_P_FLAG
UPDATE_N(R)_RECEIVED
IF_DATA_FLAG=2_STOP_REJ_TIMER
DATA_FLAG:=1
IF_F=1_CLEAR_REMOTE_BUSY
; SEND_RNR_CMD(F=1)
; START_P_TIMER
; UPDATE_N(R)_RECEIVED
; IF_DATA_FLAG=2_STOP_REJ_TIMER
; DATA_FLAG:=1
; IF_F=1_CLEAR_REMOTE_BUSY
; V(R):=V(R)+1
; DATA_INDICATION
; SEND_RNR_CMD(F=1)
; START_P_TIMER
; UPDATE_N(R)_RECEIVED
; IF_DATA_FLAG=2_STOP_REJ_TIMER
; DATA_FLAG:=0
; IF_F=1_CLEAR_REMOTE_BUSY
; V(R):=V(R)+1
; DATA_INDICATION
; UPDATE_P_FLAG
; OPTIONAL_SEND_RNR_XXX(X=0)
; UPDATE_N(R)_RECEIVED
; IF_DATA_FLAG=2_STOP_REJ_TIMER
; DATA_FLAG:=0
; IF_F=1_CLEAR_REMOTE_BUSY
BUSY14 OPTIONAL_SEND_RNR_XXX(X=0)
UPDATE_N(R)_RECEIVED
IF_DATA_FLAG=2_STOP_REJ_TIMER
DATA_FLAG:=1
; V(R):=V(R)+1
; DATA_INDICATION
; OPTIONAL_SEND_RNR_XXX(X=0)
; UPDATE_N(R)_RECEIVED
; IF_DATA_FLAG=2_STOP_REJ_TIMER
; DATA_FLAG:=0
BUSY15 UPDATE_P_FLAG
UPDATE_N(R)_RECEIVED
CLEAR_REMOTE_BUSY
BUSY16 SEND_RNR_RSP(F=1)
UPDATE_N(R)_RECEIVED
CLEAR_REMOTE_BUSY
BUSY17 UPDATE_P_FLAG
UPDATE_N(R)_RECEIVED
SET_REMOTE_BUSY
BUSY18 SEND_RNR_RSP(F=1)
UPDATE_N(R)_RECEIVED
SET_REMOTE_BUSY
BUSY19 V(S):=N(R)
UPDATE_N(R)_RECEIVED
UPDATE_P_FLAG
RE-SEND_I_XXX(X=0)
CLEAR_REMOTE_BUSY
; V(S):=N(R)
; UPDATE_N(R)_RECEIVED
; RE-SEND_I_CMD(P=1)
; CLEAR_REMOTE_BUSY
BUSY20 V(S):=N(R)
UPDATE_N(R)_RECEIVED
RE-SEND_I_XXX(X=0)
CLEAR_REMOTE_BUSY
BUSY21 V(S):=N(R)
UPDATE_N(R)_RECEIVED
SEND_RNR_RSP(F=1)
RE-SEND_I_XXX(X=0)
CLEAR_REMOTE_BUSY
BUSY22 SEND_RNR_CMD(F=1)
START_P_TIMER
BUSY23 P_FLAG:=0
; SEND_RNR_CMD(F=1)
; START_P_TIMER
; RETRY_COUNT:=RETRY_COUNT+1
BUSY24 SEND_RNR_CMD(F=1)
START_P_TIMER
RETRY_COUNT:=RETRY_COUNT+1
BUSY25 DATA_FLAG:=1
; SEND_RNR_CMD(F=1)
; START_P_TIMER
; RETRY_COUNT:=RETRY_COUNT+1
; DATA_FLAG:=1
BUSY26 DATA_FLAG:=1
;============================================================================
REJECT1 SEND_I_CMD(P=1)
START_P_TIMER
START_ACK_TIMER_IF_NOT_RUNNING
; SEND_I_XXX(X=0)
; START_ACK_TIMER_IF_NOT_RUNNING
REJECT2 SEND_I_XXX(X=0)
START_ACK_TIMER_IF_NOT_RUNNING
REJECT3 SEND_RNR_CMD(F=1)
START_P_TIMER
DATA_FLAG:=2
; SEND_RNR_XXX(X=0)
; DATA_FLAG:=2
REJECT4 SEND_RNR_XXX(X=0)
DATA_FLAG:=2
REJECT5 UPDATE_N(R)_RECEIVED
UPDATE_P_FLAG
IF_F=1_CLEAR_REMOTE_BUSY
REJECT6 SEND_RR_RSP(F=1)
UPDATE_N(R)_RECEIVED
;
; order of opcodes in REJECT7 is changed
REJECT7 V(R):=V(R)+1
SEND_ACKNOWLEDGE_CMD(P=1)
START_P_TIMER
UPDATE_N(R)_RECEIVED
IF_F=1_CLEAR_REMOTE_BUSY
STOP_REJ_TIMER
DATA_INDICATION
; V(R):=V(R)+1
; DATA_INDICATION
; UPDATE_P_FLAG
; SEND_ACKNOWLEDGE_XXX(X=0)
; UPDATE_N(R)_RECEIVED
; IF_F=1_CLEAR_REMOTE_BUSY
; STOP_REJ_TIMER
;
; order of opcodes in REJECT8 is changed
REJECT8 V(R):=V(R)+1
SEND_ACKNOWLEDGE_XXX(X=0)
UPDATE_N(R)_RECEIVED
STOP_REJ_TIMER
DATA_INDICATION
;
; order of opcodes in REJECT9 is changed
REJECT9 V(R):=V(R)+1
SEND_ACKNOWLEDGE_RSP(F=1)
UPDATE_N(R)_RECEIVED
STOP_REJ_TIMER
DATA_INDICATION
REJECT10 UPDATE_P_FLAG
UPDATE_N(R)_RECEIVED
CLEAR_REMOTE_BUSY
REJECT11 SEND_ACKNOWLEDGE_RSP(F=1)
UPDATE_N(R)_RECEIVED
CLEAR_REMOTE_BUSY
REJECT12 UPDATE_P_FLAG
UPDATE_N(R)_RECEIVED
SET_REMOTE_BUSY
REJECT13 SEND_RR_RSP(F=1)
UPDATE_N(R)_RECEIVED
SET_REMOTE_BUSY
REJECT14 V(S):=N(R)
UPDATE_N(R)_RECEIVED
UPDATE_P_FLAG
RE-SEND_I_XXX(X=0)
CLEAR_REMOTE_BUSY
; V(S):=N(R)
; UPDATE_N(R)_RECEIVED
; RE-SEND_I_CMD(P=1)
; START_P_TIMER
; CLEAR_REMOTE_BUSY
REJECT15 V(S):=N(R)
UPDATE_N(R)_RECEIVED
RE-SEND_I_XXX(X=0)
CLEAR_REMOTE_BUSY
REJECT16 V(S):=N(R)
UPDATE_N(R)_RECEIVED
RE-SEND_I_RSP(F=1)
CLEAR_REMOTE_BUSY
REJECT17 SEND_RR_CMD(P=1)
START_P_TIMER
REJECT18 SEND_REJ_CMD(P=1)
START_P_TIMER
START_REJ_TIMER
RETRY_COUNT:=RETRY_COUNT+1
REJECT19 P_FLAG:=0
; SEND_RR_CMD(P=1)
; START_P_TIMER
; START_REJ_TIMER
; RETRY_COUNT:=RETRY_COUNT+1
REJECT20 SEND_RR_CMD(P=1)
START_P_TIMER
START_REJ_TIMER
RETRY_COUNT:=RETRY_COUNT+1
;============================================================================
AWAIT1 SEND_RNR_XXX(X=0)
DATA_FLAG:=0
AWAIT2 SEND_REJ_XXX(X=0)
UPDATE_N(R)_RECEIVED
V(S):=N(R)
STOP_P_TIMER
RE-SEND_I_XXX(X=0)
START_REJ_TIMER
CLEAR_REMOTE_BUSY
; SEND_REJ_CMD(P=1)
; UPDATE_N(R)_RECEIVED
; V(S):=N(R)
; RE-SEND_I_XXX(X=0)
; START_P_TIMER
; START_REJ_TIMER
; CLEAR_REMOTE_BUSY
AWAIT3 SEND_REJ_XXX(X=0)
UPDATE_N(R)_RECEIVED
START_REJ_TIMER
AWAIT4 SEND_REJ_RSP(F=1)
UPDATE_N(R)_RECEIVED
START_REJ_TIMER
;
; order of opcode in AWAIT5 changed
AWAIT5 V(R):=V(R)+1
UPDATE_N(R)_RECEIVED
V(S):=N(R)
RE-SEND_I_CMD(P=1)_OR_SEND_RR
START_P_TIMER
CLEAR_REMOTE_BUSY
DATA_INDICATION
; V(R):=V(R)+1
; DATA_INDICATION
; STOP_P_TIMER
; UPDATE_N(R)_RECEIVED
; V(S):=N(R)
; RE-SEND_I_XXX(X=0)_OR_SEND_RR
; CLEAR_REMOTE_BUSY
;
; order of opcode in AWAIT6 changed
AWAIT6 V(R):=V(R)+1
SEND_RR_XXX(X=0)
UPDATE_N(R)_RECEIVED
DATA_INDICATION
;
; order of opcode in AWAIT7 changed
AWAIT7 V(R):=V(R)+1
SEND_RR_RSP(F=1)
UPDATE_N(R)_RECEIVED
DATA_INDICATION
AWAIT8 UPDATE_N(R)_RECEIVED
V(S):=N(R)
STOP_P_TIMER
RE-SEND_I_XXX(X=0)
CLEAR_REMOTE_BUSY
; UPDATE_N(R)_RECEIVED
; V(S):=N(R)
; RE-SEND_I_CMD(P=1)
; START_P_TIMER
; CLEAR_REMOTE_BUSY
AWAIT9 UPDATE_N(R)_RECEIVED
CLEAR_REMOTE_BUSY
AWAIT10 SEND_RR_RSP(F=1)
UPDATE_N(R)_RECEIVED
CLEAR_REMOTE_BUSY
AWAIT11 UPDATE_N(R)_RECEIVED
V(S):=N(R)
STOP_P_TIMER
SET_REMOTE_BUSY
AWAIT12 UPDATE_N(R)_RECEIVED
SET_REMOTE_BUSY
AWAIT13 SEND_RR_RSP(F=1)
UPDATE_N(R)_RECEIVED
SET_REMOTE_BUSY
AWAIT14 SEND_RR_CMD(P=1)
START_P_TIMER
RETRY_COUNT:=RETRY_COUNT+1
;============================================================================
AWAIT_BUSY1 SEND_REJ_XXX(X=0)
START_REJ_TIMER
AWAIT_BUSY2 SEND_RR_XXX(X=0)
AWAIT_BUSY3 SEND_RR_XXX(X=0)
AWAIT_BUSY4 OPTIONAL_SEND_RNR_XXX(X=0)
UPDATE_N(R)_RECEIVED
V(S):=N(R)
STOP_P_TIMER
DATA_FLAG:=1
CLEAR_REMOTE_BUSY
RE-SEND_I_XXX(X=0)
; SEND_RNR_CMD(F=1)
; UPDATE_N(R)_RECEIVED
; V(S):=N(R)
; START_P_TIMER
; DATA_FLAG:=1
; CLEAR_REMOTE_BUSY
; RE-SEND_I_XXX(X=0)
AWAIT_BUSY5 OPTIONAL_SEND_RNR_XXX(X=0)
UPDATE_N(R)_RECEIVED
DATA_FLAG:=1
AWAIT_BUSY6 SEND_RNR_RSP(F=1)
UPDATE_N(R)_RECEIVED
DATA_FLAG:=1
AWAIT_BUSY7 OPTIONAL_SEND_RNR_XXX(X=0)
UPDATE_N(R)_RECEIVED
V(S):=N(R)
DATA_FLAG:=1
STOP_P_TIMER
CLEAR_REMOTE_BUSY
RE-SEND_I_XXX(X=0)
; SEND_RNR_CMD(F=1)
; V(R):=V(R)+1
; DATA_INDICATION
; START_P_TIMER
; UPDATE_N(R)_RECEIVED
; V(S):=N(R)
; DATA_FLAG:=0
; CLEAR_REMOTE_BUSY
; RE-SEND_I_XXX(X=0)
; OPTIONAL_SEND_RNR_XXX(X=0)
; V(R):=V(R)+1
; DATA_INDICATION
; STOP_P_TIMER
; UPDATE_N(R)_RECEIVED
; V(S):=N(R)
; DATA_FLAG:=0
; CLEAR_REMOTE_BUSY
; RE-SEND_I_XXX(X=0)
AWAIT_BUSY8 OPTIONAL_SEND_RNR_XXX(X=0)
UPDATE_N(R)_RECEIVED
DATA_FLAG:=1
; OPTIONAL_SEND_RNR_XXX(X=0)
; V(R):=V(R)+1
; DATA_INDICATION
; UPDATE_N(R)_RECEIVED
; DATA_FLAG:=0
AWAIT_BUSY9 SEND_RNR_RSP(F=1)
UPDATE_N(R)_RECEIVED
DATA_FLAG:=1
; SEND_RNR_RSP(F=1)
; V(R):=V(R)+1
; DATA_INDICATION
; UPDATE_N(R)_RECEIVED
; DATA_FLAG:=0
AWAIT_BUSY10 UPDATE_N(R)_RECEIVED
V(S):=N(R)
STOP_P_TIMER
RE-SEND_I_XXX(X=0)
CLEAR_REMOTE_BUSY
; UPDATE_N(R)_RECEIVED
; V(S):=N(R)
; RE-SEND_I_CMD(P=1)
; START_P_TIMER
; CLEAR_REMOTE_BUSY
AWAIT_BUSY11 UPDATE_N(R)_RECEIVED
CLEAR_REMOTE_BUSY
AWAIT_BUSY12 SEND_RNR_RSP(F=1)
UPDATE_N(R)_RECEIVED
CLEAR_REMOTE_BUSY
AWAIT_BUSY13 UPDATE_N(R)_RECEIVED
V(S):=N(R)
STOP_P_TIMER
SET_REMOTE_BUSY
AWAIT_BUSY14 UPDATE_N(R)_RECEIVED
SET_REMOTE_BUSY
AWAIT_BUSY15 SEND_RNR_RSP(F=1)
UPDATE_N(R)_RECEIVED
SET_REMOTE_BUSY
AWAIT_BUSY16 SEND_RNR_CMD(F=1)
START_P_TIMER
RETRY_COUNT:=RETRY_COUNT+1
;============================================================================
AWAIT_REJECT1 SEND_RNR_XXX(X=0)
DATA_FLAG:=2
AWAIT_REJECT2 UPDATE_N(R)_RECEIVED
AWAIT_REJECT3 SEND_RR_RSP(F=1)
UPDATE_N(R)_RECEIVED
;
; order of opcodes in AWAIT_REJECT4 changed
AWAIT_REJECT4 V(R):=V(R)+1
UPDATE_N(R)_RECEIVED
V(S):=N(R)
RE-SEND_I_CMD(P=1)_OR_SEND_RR
START_P_TIMER
STOP_REJ_TIMER
CLEAR_REMOTE_BUSY
DATA_INDICATION
; V(R):=V(R)+1
; DATA_INDICATION
; STOP_P_TIMER
; STOP_REJ_TIMER
; UPDATE_N(R)_RECEIVED
; V(S):=N(R)
; RE-SEND_I_CMD(P=1)_OR_SEND_RR
; CLEAR_REMOTE_BUSY
;
; order of opcodes in AWAIT_REJECT5 changed
AWAIT_REJECT5 V(R):=V(R)+1
SEND_RR_XXX(X=0)
STOP_REJ_TIMER
UPDATE_N(R)_RECEIVED
DATA_INDICATION
;
; order of opcodes in AWAIT_REJECT6 changed
AWAIT_REJECT6 V(R):=V(R)+1
SEND_RR_RSP(F=1)
STOP_REJ_TIMER
UPDATE_N(R)_RECEIVED
DATA_INDICATION
AWAIT_REJECT7 UPDATE_N(R)_RECEIVED
V(S):=N(R)
STOP_P_TIMER
RE-SEND_I_XXX(X=0)
CLEAR_REMOTE_BUSY
; UPDATE_N(R)_RECEIVED
; V(S):=N(R)
; RE-SEND_I_CMD(P=1)
; START_P_TIMER
; CLEAR_REMOTE_BUSY
AWAIT_REJECT8 UPDATE_N(R)_RECEIVED
CLEAR_REMOTE_BUSY
AWAIT_REJECT9 SEND_RR_RSP(F=1)
UPDATE_N(R)_RECEIVED
CLEAR_REMOTE_BUSY
AWAIT_REJECT10 UPDATE_N(R)_RECEIVED
V(S):=N(R)
STOP_P_TIMER
SET_REMOTE_BUSY
AWAIT_REJECT11 UPDATE_N(R)_RECEIVED
SET_REMOTE_BUSY
AWAIT_REJECT12 SEND_RR_RSP(F=1)
UPDATE_N(R)_RECEIVED
SET_REMOTE_BUSY
AWAIT_REJECT13 SEND_REJ_CMD(P=1)
START_P_TIMER
RETRY_COUNT:=RETRY_COUNT+1
;============================================================================
 
/pseudo/opcodes
0,0 → 1,72
0 NOP
1 CLEAR_REMOTE_BUSY
2 CONNECT_INDICATION
3 CONNECT_CONFIRM
4 DATA_INDICATION
5 DISCONNECT_INDICATION
6 DUMMY_6
7 RESET_CONFIRM
8 DUMMY_8
9 IF_F=1_CLEAR_REMOTE_BUSY
10 IF_DATA_FLAG=2_STOP_REJ_TIMER
11 SEND_DISC_CMD(P=X)
12 SEND_DM_RSP(F=X)
13 SEND_FRMR_RSP(F=X)
14 RE-SEND_FRMR_RSP(F=0)
15 RE-SEND_FRMR_RSP(F=P)
16 SEND_I_CMD(P=1)
17 RE-SEND_I_CMD(P=1)
18 RE-SEND_I_CMD(P=1)_OR_SEND_RR
19 SEND_I_XXX(X=0)
20 RE-SEND_I_XXX(X=0)
21 RE-SEND_I_XXX(X=0)_OR_SEND_RR
22 RE-SEND_I_RSP(F=1)
23 SEND_REJ_CMD(P=1)
24 SEND_REJ_RSP(F=1)
25 SEND_REJ_XXX(X=0)
26 SEND_RNR_CMD(F=1)
27 SEND_RNR_RSP(F=1)
28 SEND_RNR_XXX(X=0)
29 SET_REMOTE_BUSY
30 OPTIONAL_SEND_RNR_XXX(X=0)
31 SEND_RR_CMD(P=1)
32 SEND_ACKNOWLEDGE_CMD(P=1)
33 SEND_RR_RSP(F=1)
34 SEND_ACKNOWLEDGE_RSP(F=1)
35 SEND_RR_XXX(X=0)
36 SEND_ACKNOWLEDGE_XXX(X=0)
37 SEND_SABME_CMD(P=X)
38 SEND_UA_RSP(F=X)
39 S_FLAG:=0
40 S_FLAG:=1
41 START_P_TIMER
42 START_ACK_TIMER
43 START_REJ_TIMER
44 START_ACK_TIMER_IF_NOT_RUNNING
45 STOP_ACK_TIMER
46 STOP_P_TIMER
47 STOP_REJ_TIMER
48 STOP_ALL_TIMERS
49 STOP_OTHER_TIMERS
50 UPDATE_N(R)_RECEIVED
51 UPDATE_P_FLAG
52 DATA_FLAG:=2
53 DATA_FLAG:=0
54 DATA_FLAG:=1
55 IF_DATA_FLAG_=0_THEN_DATA_FLAG:=1
56 P_FLAG:=0
57 P_FLAG:=P
58 REMOTE_BUSY:=0
59 RETRY_COUNT:=0
60 RETRY_COUNT:=RETRY_COUNT+1
61 V(R):=0
62 V(R):=V(R)+1
63 V(S):=0
64 V(S):=N(R)
65 F_FLAG:=P
66 REPORT_STATUS(FRMR_RECEIVED)
67 REPORT_STATUS(FRMR_SENT)
68 REPORT_STATUS(REMOTE_BUSY)
69 REPORT_STATUS(REMOTE_NOT_BUSY)
70 RESET_INDICATION(LOCAL)
71 RESET_INDICATION(REMOTE)
/pseudo/Makefile
0,0 → 1,13
all: pseudocode.h actionnm.h
 
clean:
touch pseudocode.h actionnm.h
rm pseudocode.h actionnm.h
 
pseudocode.h: pseudocode opcd2num.sed compile.awk
sed -f opcd2num.sed pseudocode | awk -f compile.awk >pseudocode.h
 
actionnm.h: pseudocode.h actionnm.awk
awk -f actionnm.awk pseudocode.h>actionnm.h
 
/pseudo/opcodesnm.h
0,0 → 1,23
static char *opcode_names[] = {
"NOP", "CLEAR_REMOTE_BUSY", "CONNECT_INDICATION", "CONNECT_CONFIRM", "DATA_INDICATION",
"DISCONNECT_INDICATION", "DUMMY_6", "RESET_CONFIRM", "DUMMY_8",
"IF_F=1_CLEAR_REMOTE_BUSY", "IF_DATA_FLAG=2_STOP_REJ_TIMER", "SEND_DISC_CMD(P=X)",
"SEND_DM_RSP(F=X)", "SEND_FRMR_RSP(F=X)", "RE-SEND_FRMR_RSP(F=0)",
"RE-SEND_FRMR_RSP(F=P)", "SEND_I_CMD(P=1)", "RE-SEND_I_CMD(P=1)",
"RE-SEND_I_CMD(P=1)_OR_SEND_RR", "SEND_I_XXX(X=0)", "RE-SEND_I_XXX(X=0)",
"RE-SEND_I_XXX(X=0)_OR_SEND_RR", "RE-SEND_I_RSP(F=1)", "SEND_REJ_CMD(P=1)",
"SEND_REJ_RSP(F=1)", "SEND_REJ_XXX(X=0)", "SEND_RNR_CMD(F=1)", "SEND_RNR_RSP(F=1)",
"SEND_RNR_XXX(X=0)", "SET_REMOTE_BUSY", "OPTIONAL_SEND_RNR_XXX(X=0)",
"SEND_RR_CMD(P=1)", "SEND_ACKNOWLEDGE_CMD(P=1)", "SEND_RR_RSP(F=1)",
"SEND_ACKNOWLEDGE_RSP(F=1)", "SEND_RR_XXX(X=0)", "SEND_ACKNOWLEDGE_XXX(X=0)",
"SEND_SABME_CMD(P=X)", "SEND_UA_RSP(F=X)", "S_FLAG:=0", "S_FLAG:=1", "START_P_TIMER",
"START_ACK_TIMER", "START_REJ_TIMER", "START_ACK_TIMER_IF_NOT_RUNNING",
"STOP_ACK_TIMER", "STOP_P_TIMER", "STOP_REJ_TIMER", "STOP_ALL_TIMERS",
"STOP_OTHER_TIMERS", "UPDATE_N(R)_RECEIVED", "UPDATE_P_FLAG", "DATA_FLAG:=2",
"DATA_FLAG:=0", "DATA_FLAG:=1", "IF_DATA_FLAG_=0_THEN_DATA_FLAG:=1", "P_FLAG:=0",
"P_FLAG:=P", "REMOTE_BUSY:=0", "RETRY_COUNT:=0", "RETRY_COUNT:=RETRY_COUNT+1",
"V(R):=0", "V(R):=V(R)+1", "V(S):=0", "V(S):=N(R)", "F_FLAG:=P",
"REPORT_STATUS(FRMR_RECEIVED)", "REPORT_STATUS(FRMR_SENT)",
"REPORT_STATUS(REMOTE_BUSY)", "REPORT_STATUS(REMOTE_NOT_BUSY)",
"RESET_INDICATION(LOCAL)", "RESET_INDICATION(REMOTE)"
};
/pseudo/actionnm.h
0,0 → 1,51
 
/* this file generated on Thu Oct 24 11:42:37 GMT 1996 */
 
static char *action_names[] = {
"NOP" ,"ADM1" ,"ADM2" ,"ADM3" ,
"ADM4" ,"ADM5" ,"CONN2" ,"CONN3" ,
"CONN4" ,"CONN5" ,"RESWAIT1" ,"RESWAIT2" ,
"RESWAIT3" ,"RESWAIT4" ,"RESWAIT5" ,"RESWAIT6" ,
"RESWAIT7" ,"RESWAIT8" ,"RESCHK1" ,"RESCHK2" ,
"RESCHK3" ,"RESCHK4" ,"RESCHK5" ,"RESCHK6" ,
"SETUP1" ,"SETUP2" ,"SETUP3" ,"SETUP4" ,
"SETUP5" ,"SETUP6" ,"SETUP7" ,"SETUP8" ,
"RESET1" ,"RESET2" ,"RESET3" ,"RESET4" ,
"RESET5" ,"RESET6" ,"RESET7" ,"RESET8" ,
"D_CONN1" ,"D_CONN2" ,"D_CONN3" ,"D_CONN4" ,
"D_CONN5" ,"D_CONN6" ,"D_CONN7" ,"ERR1" ,
"ERR2" ,"ERR3" ,"ERR4" ,"ERR5" ,
"ERR6" ,"ERR7" ,"ERR8" ,"SH1" ,
"SH2" ,"SH3" ,"SH4" ,"SH5" ,
"SH6" ,"SH7" ,"SH8" ,"SH9" ,
"SH10" ,"SH11" ,"NORMAL1" ,"NORMAL2" ,
"NORMAL3" ,"NORMAL4" ,"NORMAL5" ,"NORMAL6" ,
"NORMAL7" ,"NORMAL8A" ,"NORMAL8B" ,"NORMAL9" ,
"NORMAL10" ,"NORMAL11" ,"NORMAL12" ,"NORMAL13" ,
"NORMAL14" ,"NORMAL15" ,"NORMAL16" ,"NORMAL17" ,
"NORMAL18" ,"NORMAL19" ,"NORMAL20" ,"BUSY1" ,
"BUSY2" ,"BUSY3" ,"BUSY4" ,"BUSY5" ,
"BUSY6" ,"BUSY7" ,"BUSY8" ,"BUSY9" ,
"BUSY10" ,"BUSY11" ,"BUSY12" ,"BUSY13" ,
"BUSY14" ,"BUSY15" ,"BUSY16" ,"BUSY17" ,
"BUSY18" ,"BUSY19" ,"BUSY20" ,"BUSY21" ,
"BUSY22" ,"BUSY23" ,"BUSY24" ,"BUSY25" ,
"BUSY26" ,"REJECT1" ,"REJECT2" ,"REJECT3" ,
"REJECT4" ,"REJECT5" ,"REJECT6" ,"REJECT7" ,
"REJECT8" ,"REJECT9" ,"REJECT10" ,"REJECT11" ,
"REJECT12" ,"REJECT13" ,"REJECT14" ,"REJECT15" ,
"REJECT16" ,"REJECT17" ,"REJECT18" ,"REJECT19" ,
"REJECT20" ,"AWAIT1" ,"AWAIT2" ,"AWAIT3" ,
"AWAIT4" ,"AWAIT5" ,"AWAIT6" ,"AWAIT7" ,
"AWAIT8" ,"AWAIT9" ,"AWAIT10" ,"AWAIT11" ,
"AWAIT12" ,"AWAIT13" ,"AWAIT14" ,"AWAIT_BUSY1" ,
"AWAIT_BUSY2" ,"AWAIT_BUSY3" ,"AWAIT_BUSY4" ,"AWAIT_BUSY5" ,
"AWAIT_BUSY6" ,"AWAIT_BUSY7" ,"AWAIT_BUSY8" ,"AWAIT_BUSY9" ,
"AWAIT_BUSY10" ,"AWAIT_BUSY11" ,"AWAIT_BUSY12" ,"AWAIT_BUSY13" ,
"AWAIT_BUSY14" ,"AWAIT_BUSY15" ,"AWAIT_BUSY16" ,"AWAIT_REJECT1" ,
"AWAIT_REJECT2" ,"AWAIT_REJECT3" ,"AWAIT_REJECT4" ,"AWAIT_REJECT5" ,
"AWAIT_REJECT6" ,"AWAIT_REJECT7" ,"AWAIT_REJECT8" ,"AWAIT_REJECT9" ,
"AWAIT_REJECT10" ,"AWAIT_REJECT11" ,"AWAIT_REJECT12" ,"AWAIT_REJECT13" ,
0
};
 
/cl2llc.pre
0,0 → 1,615
/*
* NET An implementation of the IEEE 802.2 LLC protocol for the
* LINUX operating system. LLC is implemented as a set of
* state machines and callbacks for higher networking layers.
*
* Class 2 llc algorithm.
* Pseudocode interpreter, transition table lookup,
* data_request & indicate primitives...
*
* Code for initialization, termination, registration and
* MAC layer glue.
*
* Copyright Tim Alpaerts,
* <Tim_Alpaerts@toyota-motor-europe.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
* Changes
* Alan Cox : Chainsawed into Linux format
* Modified to use llc_ names
* Changed callbacks
*
* This file must be processed by sed before it can be compiled.
*/
 
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/netdevice.h>
#include <linux/skbuff.h>
#include <net/p8022.h>
#include <linux/proc_fs.h>
#include <linux/stat.h>
#include <asm/byteorder.h>
 
#include "pseudo/pseudocode.h"
#include "transit/pdutr.h"
#include "transit/timertr.h"
#include <net/llc_frame.h>
#include <net/llc.h>
 
/*
* Data_request() is called by the client to present a data unit
* to the llc for transmission.
* In the future this function should also check if the transmit window
* allows the sending of another pdu, and if not put the skb on the atq
* for deferred sending.
*/
 
int llc_data_request(llcptr lp, struct sk_buff *skb)
{
if (skb_headroom(skb) < (lp->dev->hard_header_len +4)){
printk("cl2llc: data_request() not enough headroom in skb\n");
return -1;
};
 
skb_push(skb, 4);
 
if ((lp->state != NORMAL) && (lp->state != BUSY) && (lp->state != REJECT))
{
printk("cl2llc: data_request() while no llc connection\n");
return -1;
}
 
if (lp->remote_busy)
{ /* if the remote llc is BUSY, */
ADD_TO_ATQ(skb); /* save skb in the await transmit queue */
return 0;
}
else
{
/*
* Else proceed with xmit
*/
 
switch(lp->state)
{
case NORMAL:
if(lp->p_flag)
llc_interpret_pseudo_code(lp, NORMAL2, skb, NO_FRAME);
else
llc_interpret_pseudo_code(lp, NORMAL1, skb, NO_FRAME);
break;
case BUSY:
if (lp->p_flag)
llc_interpret_pseudo_code(lp, BUSY2, skb, NO_FRAME);
else
llc_interpret_pseudo_code(lp, BUSY1, skb, NO_FRAME);
break;
case REJECT:
if (lp->p_flag)
llc_interpret_pseudo_code(lp, REJECT2, skb, NO_FRAME);
else
llc_interpret_pseudo_code(lp, REJECT1, skb, NO_FRAME);
break;
default:;
}
if(lp->llc_callbacks)
{
lp->llc_event(lp);
lp->llc_callbacks=0;
}
return 0;
}
}
 
 
 
/*
* Disconnect_request() requests that the llc to terminate a connection
*/
 
void disconnect_request(llcptr lp)
{
if ((lp->state == NORMAL) ||
(lp->state == BUSY) ||
(lp->state == REJECT) ||
(lp->state == AWAIT) ||
(lp->state == AWAIT_BUSY) ||
(lp->state == AWAIT_REJECT))
{
lp->state = D_CONN;
llc_interpret_pseudo_code(lp, SH1, NULL, NO_FRAME);
if(lp->llc_callbacks)
{
lp->llc_event(lp);
lp->llc_callbacks=0;
}
/*
* lp may be invalid after the callback
*/
}
}
 
 
/*
* Connect_request() requests that the llc to start a connection
*/
 
void connect_request(llcptr lp)
{
if (lp->state == ADM)
{
lp->state = SETUP;
llc_interpret_pseudo_code(lp, ADM1, NULL, NO_FRAME);
if(lp->llc_callbacks)
{
lp->llc_event(lp);
lp->llc_callbacks=0;
}
/*
* lp may be invalid after the callback
*/
}
}
 
 
/*
* Interpret_pseudo_code() executes the actions in the connection component
* state transition table. Table 4 in document on p88.
*
* If this function is called to handle an incoming pdu, skb will point
* to the buffer with the pdu and type will contain the decoded pdu type.
*
* If called by data_request skb points to an skb that was skb_alloc-ed by
* the llc client to hold the information unit to be transmitted, there is
* no valid type in this case.
*
* If called because a timer expired no skb is passed, and there is no
* type.
*/
 
void llc_interpret_pseudo_code(llcptr lp, int pc_label, struct sk_buff *skb,
char type)
{
short int pc; /* program counter in pseudo code array */
char p_flag_received;
frameptr fr;
int resend_count; /* number of pdus resend by llc_resend_ipdu() */
int ack_count; /* number of pdus acknowledged */
struct sk_buff *skb2;
 
if (skb != NULL)
{
fr = (frameptr) skb->data;
}
else
fr = NULL;
 
pc = pseudo_code_idx[pc_label];
while(pseudo_code[pc])
{
switch(pseudo_code[pc])
{
case IF_F=1_CLEAR_REMOTE_BUSY:
if ((type != I_CMD) || (fr->i_hdr.i_pflag == 0))
break;
case CLEAR_REMOTE_BUSY:
lp->remote_busy = 0;
llc_stop_timer(lp, BUSY_TIMER);
if ((lp->state == NORMAL) ||
(lp->state == REJECT) ||
(lp->state == BUSY))
{
skb2 = llc_pull_from_atq(lp);
if (skb2 != NULL)
llc_start_timer(lp, ACK_TIMER);
while (skb2 != NULL)
{
llc_sendipdu( lp, I_CMD, 0, skb2);
skb2 = llc_pull_from_atq(lp);
}
}
break;
case CONNECT_INDICATION:
lp->state = NORMAL; /* needed to eliminate connect_response() */
lp->llc_mode = MODE_ABM;
lp->llc_callbacks|=LLC_CONN_INDICATION;
break;
case CONNECT_CONFIRM:
lp->llc_mode = MODE_ABM;
lp->llc_callbacks|=LLC_CONN_CONFIRM;
break;
case DATA_INDICATION:
skb_pull(skb, 4);
lp->inc_skb=skb;
lp->llc_callbacks|=LLC_DATA_INDIC;
break;
case DISCONNECT_INDICATION:
lp->llc_mode = MODE_ADM;
lp->llc_callbacks|=LLC_DISC_INDICATION;
break;
case RESET_INDICATION(LOCAL):
lp->llc_callbacks|=LLC_RESET_INDIC_LOC;
break;
case RESET_INDICATION(REMOTE):
lp->llc_callbacks|=LLC_RESET_INDIC_REM;
break;
case RESET_CONFIRM:
lp->llc_callbacks|=LLC_RST_CONFIRM;
break;
case REPORT_STATUS(FRMR_RECEIVED):
lp->llc_callbacks|=LLC_FRMR_RECV;
break;
case REPORT_STATUS(FRMR_SENT):
lp->llc_callbacks|=LLC_FRMR_SENT;
break;
case REPORT_STATUS(REMOTE_BUSY):
lp->llc_callbacks|=LLC_REMOTE_BUSY;
break;
case REPORT_STATUS(REMOTE_NOT_BUSY):
lp->llc_callbacks|=LLC_REMOTE_NOTBUSY;
break;
case SEND_DISC_CMD(P=X):
llc_sendpdu(lp, DISC_CMD, lp->f_flag, 0, NULL);
break;
case SEND_DM_RSP(F=X):
llc_sendpdu(lp, DM_RSP, 0, 0, NULL);
break;
case SEND_FRMR_RSP(F=X):
lp->frmr_info_fld.cntl1 = fr->pdu_cntl.byte1;
lp->frmr_info_fld.cntl2 = fr->pdu_cntl.byte2;
lp->frmr_info_fld.vs = lp->vs;
lp->frmr_info_fld.vr_cr = lp->vr;
llc_sendpdu(lp, FRMR_RSP, 0, 5, (char *) &lp->frmr_info_fld);
break;
case RE-SEND_FRMR_RSP(F=0):
llc_sendpdu(lp, FRMR_RSP, 0, 5, (char *) &lp->frmr_info_fld);
break;
case RE-SEND_FRMR_RSP(F=P):
llc_sendpdu(lp, FRMR_RSP, lp->p_flag,
5, (char *) &lp->frmr_info_fld);
break;
case SEND_I_CMD(P=1):
llc_sendipdu(lp, I_CMD, 1, skb);
break;
case RE-SEND_I_CMD(P=1):
resend_count = llc_resend_ipdu(lp, fr->i_hdr.nr, I_CMD, 1);
break;
case RE-SEND_I_CMD(P=1)_OR_SEND_RR:
resend_count = llc_resend_ipdu(lp, fr->i_hdr.nr, I_CMD, 1);
if (resend_count == 0)
{
llc_sendpdu(lp, RR_CMD, 1, 0, NULL);
}
break;
case SEND_I_XXX(X=0):
llc_sendipdu(lp, I_CMD, 0, skb);
break;
case RE-SEND_I_XXX(X=0):
resend_count = llc_resend_ipdu(lp, fr->i_hdr.nr, I_CMD, 0);
break;
case RE-SEND_I_XXX(X=0)_OR_SEND_RR:
resend_count = llc_resend_ipdu(lp, fr->i_hdr.nr, I_CMD, 0);
if (resend_count == 0)
{
llc_sendpdu(lp, RR_CMD, 0, 0, NULL);
}
break;
case RE-SEND_I_RSP(F=1):
resend_count = llc_resend_ipdu(lp, fr->i_hdr.nr, I_RSP, 1);
break;
case SEND_REJ_CMD(P=1):
llc_sendpdu(lp, REJ_CMD, 1, 0, NULL);
break;
case SEND_REJ_RSP(F=1):
llc_sendpdu(lp, REJ_RSP, 1, 0, NULL);
break;
case SEND_REJ_XXX(X=0):
if (IS_RSP(fr))
llc_sendpdu(lp, REJ_CMD, 0, 0, NULL);
else
llc_sendpdu(lp, REJ_RSP, 0, 0, NULL);
break;
case SEND_RNR_CMD(F=1):
llc_sendpdu(lp, RNR_CMD, 1, 0, NULL);
break;
case SEND_RNR_RSP(F=1):
llc_sendpdu(lp, RNR_RSP, 1, 0, NULL);
break;
case SEND_RNR_XXX(X=0):
if (IS_RSP(fr))
llc_sendpdu(lp, RNR_CMD, 0, 0, NULL);
else
llc_sendpdu(lp, RNR_RSP, 0, 0, NULL);
break;
case SET_REMOTE_BUSY:
if (lp->remote_busy == 0)
{
lp->remote_busy = 1;
llc_start_timer(lp, BUSY_TIMER);
lp->llc_callbacks|=LLC_REMOTE_BUSY;
}
else if (lp->timer_state[BUSY_TIMER] == TIMER_IDLE)
{
llc_start_timer(lp, BUSY_TIMER);
}
break;
case OPTIONAL_SEND_RNR_XXX(X=0):
if (IS_RSP(fr))
llc_sendpdu(lp, RNR_CMD, 0, 0, NULL);
else
llc_sendpdu(lp, RNR_RSP, 0, 0, NULL);
break;
case SEND_RR_CMD(P=1):
llc_sendpdu(lp, RR_CMD, 1, 0, NULL);
break;
case SEND_ACKNOWLEDGE_CMD(P=1):
llc_sendpdu(lp, RR_CMD, 1, 0, NULL);
break;
case SEND_RR_RSP(F=1):
llc_sendpdu(lp, RR_RSP, 1, 0, NULL);
break;
case SEND_ACKNOWLEDGE_RSP(F=1):
llc_sendpdu(lp, RR_RSP, 1, 0, NULL);
break;
case SEND_RR_XXX(X=0):
llc_sendpdu(lp, RR_RSP, 0, 0, NULL);
break;
case SEND_ACKNOWLEDGE_XXX(X=0):
if (IS_RSP(fr))
llc_sendpdu(lp, RR_CMD, 0, 0, NULL);
else
llc_sendpdu(lp, RR_RSP, 0, 0, NULL);
break;
case SEND_SABME_CMD(P=X):
llc_sendpdu(lp, SABME_CMD, 0, 0, NULL);
lp->f_flag = 0;
break;
case SEND_UA_RSP(F=X):
llc_sendpdu(lp, UA_RSP, lp->f_flag, 0, NULL);
break;
case S_FLAG:=0:
lp->s_flag = 0;
break;
case S_FLAG:=1:
lp->s_flag = 1;
break;
case START_P_TIMER:
if(lp->timer_state[P_TIMER] == TIMER_RUNNING)
llc_stop_timer(lp, P_TIMER);
llc_start_timer(lp, P_TIMER);
if (lp->p_flag == 0)
{
lp->retry_count = 0;
lp->p_flag = 1;
}
break;
case START_ACK_TIMER_IF_NOT_RUNNING:
if (lp->timer_state[ACK_TIMER] == TIMER_IDLE)
llc_start_timer(lp, ACK_TIMER);
break;
case START_ACK_TIMER:
llc_start_timer(lp, ACK_TIMER);
break;
case START_REJ_TIMER:
llc_start_timer(lp, REJ_TIMER);
break;
case STOP_ACK_TIMER:
llc_stop_timer(lp, ACK_TIMER);
break;
case STOP_P_TIMER:
llc_stop_timer(lp, ACK_TIMER);
lp->p_flag = 0;
break;
case IF_DATA_FLAG=2_STOP_REJ_TIMER:
if (lp->data_flag == 2)
llc_stop_timer(lp, REJ_TIMER);
break;
case STOP_REJ_TIMER:
llc_stop_timer(lp, REJ_TIMER);
break;
case STOP_ALL_TIMERS:
llc_stop_timer(lp, ACK_TIMER);
llc_stop_timer(lp, P_TIMER);
llc_stop_timer(lp, REJ_TIMER);
llc_stop_timer(lp, BUSY_TIMER);
break;
case STOP_OTHER_TIMERS:
llc_stop_timer(lp, P_TIMER);
llc_stop_timer(lp, REJ_TIMER);
llc_stop_timer(lp, BUSY_TIMER);
break;
case UPDATE_N(R)_RECEIVED:
ack_count = llc_free_acknowledged_skbs(lp,
(unsigned char) fr->s_hdr.nr);
if (ack_count > 0)
{
lp->retry_count = 0;
llc_stop_timer(lp, ACK_TIMER);
if (skb_peek(&lp->rtq) != NULL)
{
/*
* Re-transmit queue not empty
*/
llc_start_timer(lp, ACK_TIMER);
}
}
break;
case UPDATE_P_FLAG:
if (IS_UFRAME(fr))
p_flag_received = fr->u_hdr.u_pflag;
else
p_flag_received = fr->i_hdr.i_pflag;
if ((fr->pdu_hdr.ssap & 0x01) && (p_flag_received))
{
lp->p_flag = 0;
llc_stop_timer(lp, P_TIMER);
}
break;
case DATA_FLAG:=2:
lp->data_flag = 2;
break;
case DATA_FLAG:=0:
lp->data_flag = 0;
break;
case DATA_FLAG:=1:
lp->data_flag = 1;
break;
case IF_DATA_FLAG_=0_THEN_DATA_FLAG:=1:
if (lp->data_flag == 0)
lp->data_flag = 1;
break;
case P_FLAG:=0:
lp->p_flag = 0;
break;
case P_FLAG:=P:
lp->p_flag = lp->f_flag;
break;
case REMOTE_BUSY:=0:
lp->remote_busy = 0;
break;
case RETRY_COUNT:=0:
lp->retry_count = 0;
break;
case RETRY_COUNT:=RETRY_COUNT+1:
lp->retry_count++;
break;
case V(R):=0:
lp->vr = 0;
break;
case V(R):=V(R)+1:
lp->vr++;
break;
case V(S):=0:
lp->vs = 0;
break;
case V(S):=N(R):
lp->vs = fr->i_hdr.nr;
break;
case F_FLAG:=P:
if (IS_UFRAME(fr))
lp->f_flag = fr->u_hdr.u_pflag;
else
lp->f_flag = fr->i_hdr.i_pflag;
break;
default:;
}
pc++;
}
}
 
 
/*
* Process_otype2_frame will handle incoming frames
* for 802.2 Type 2 Procedure.
*/
 
void llc_process_otype2_frame(llcptr lp, struct sk_buff *skb, char type)
{
int idx; /* index in transition table */
int pc_label; /* action to perform, from tr tbl */
int validation; /* result of validate_seq_nos */
int p_flag_received; /* p_flag in received frame */
frameptr fr;
 
fr = (frameptr) skb->data;
 
if (IS_UFRAME(fr))
p_flag_received = fr->u_hdr.u_pflag;
else
p_flag_received = fr->i_hdr.i_pflag;
 
switch(lp->state)
{
/* Compute index in transition table: */
case ADM:
idx = type;
idx = (idx << 1) + p_flag_received;
break;
case CONN:
case RESET_WAIT:
case RESET_CHECK:
case ERROR:
idx = type;
break;
case SETUP:
case RESET:
case D_CONN:
idx = type;
idx = (idx << 1) + lp->p_flag;
break;
case NORMAL:
case BUSY:
case REJECT:
case AWAIT:
case AWAIT_BUSY:
case AWAIT_REJECT:
validation = llc_validate_seq_nos(lp, fr);
if (validation > 3)
type = BAD_FRAME;
idx = type;
idx = (idx << 1);
if (validation & 1)
idx = idx +1;
idx = (idx << 1) + p_flag_received;
idx = (idx << 1) + lp->p_flag;
default:
printk("llc_proc: bad state\n");
return;
}
idx = (idx << 1) + pdutr_offset[lp->state];
lp->state = pdutr_entry[idx +1];
pc_label = pdutr_entry[idx];
if (pc_label != NOP)
{
llc_interpret_pseudo_code(lp, pc_label, skb, type);
if(lp->llc_callbacks)
{
lp->llc_event(lp);
lp->llc_callbacks=0;
}
/*
* lp may no longer be valid after this point. Be
* careful what is added!
*/
}
}
 
 
void llc_timer_expired(llcptr lp, int t)
{
int idx; /* index in transition table */
int pc_label; /* action to perform, from tr tbl */
 
lp->timer_state[t] = TIMER_EXPIRED;
idx = lp->state; /* Compute index in transition table: */
idx = (idx << 2) + t;
idx = idx << 1;
if (lp->retry_count >= lp->n2)
idx = idx + 1;
idx = (idx << 1) + lp->s_flag;
idx = (idx << 1) + lp->p_flag;
idx = idx << 1; /* 2 bytes per entry: action & newstate */
 
pc_label = timertr_entry[idx];
if (pc_label != NOP)
{
llc_interpret_pseudo_code(lp, pc_label, NULL, NO_FRAME);
lp->state = timertr_entry[idx +1];
}
lp->timer_state[t] = TIMER_IDLE;
if(lp->llc_callbacks)
{
lp->llc_event(lp);
lp->llc_callbacks=0;
}
/*
* And lp may have vanished in the event callback
*/
}
 
/sysctl_net_802.c
0,0 → 1,28
/* -*- linux-c -*-
* sysctl_net_802.c: sysctl interface to net 802 subsystem.
*
* Begun April 1, 1996, Mike Shaver.
* Added /proc/sys/net/802 directory entry (empty =) ). [MS]
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*/
 
#include <linux/mm.h>
#include <linux/sysctl.h>
#include <linux/config.h>
 
ctl_table e802_table[] = {
{0}
};
 
#ifdef CONFIG_TR
extern int sysctl_tr_rif_timeout;
ctl_table tr_table[] = {
{NET_TR_RIF_TIMEOUT, "rif_timeout", &sysctl_tr_rif_timeout, sizeof(int),
0644, NULL, &proc_dointvec},
{0}
};
#endif
/psnap.c
0,0 → 1,154
/*
* SNAP data link layer. Derived from 802.2
*
* Alan Cox <Alan.Cox@linux.org>, from the 802.2 layer by Greg Page.
* Merged in additions from Greg Page's psnap.c.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*/
 
#include <linux/module.h>
#include <linux/netdevice.h>
#include <linux/skbuff.h>
#include <net/datalink.h>
#include <net/p8022.h>
#include <net/psnap.h>
#include <linux/mm.h>
#include <linux/in.h>
#include <linux/init.h>
 
static struct datalink_proto *snap_list = NULL;
static struct datalink_proto *snap_dl = NULL; /* 802.2 DL for SNAP */
 
/*
* Find a snap client by matching the 5 bytes.
*/
 
static struct datalink_proto *find_snap_client(unsigned char *desc)
{
struct datalink_proto *proto;
 
for (proto = snap_list; proto != NULL && memcmp(proto->type, desc, 5) ; proto = proto->next);
return proto;
}
 
/*
* A SNAP packet has arrived
*/
 
int snap_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt)
{
static struct packet_type psnap_packet_type =
{
0,
NULL, /* All Devices */
snap_rcv,
NULL,
NULL,
};
 
struct datalink_proto *proto;
 
proto = find_snap_client(skb->h.raw);
if (proto != NULL)
{
/*
* Pass the frame on.
*/
 
skb->h.raw += 5;
skb->nh.raw += 5;
skb_pull(skb,5);
if (psnap_packet_type.type == 0)
psnap_packet_type.type=htons(ETH_P_SNAP);
 
return proto->rcvfunc(skb, dev, &psnap_packet_type);
}
skb->sk = NULL;
kfree_skb(skb);
return 0;
}
 
/*
* Put a SNAP header on a frame and pass to 802.2
*/
 
static void snap_datalink_header(struct datalink_proto *dl, struct sk_buff *skb, unsigned char *dest_node)
{
memcpy(skb_push(skb,5),dl->type,5);
snap_dl->datalink_header(snap_dl, skb, dest_node);
}
 
/*
* Set up the SNAP layer
*/
 
EXPORT_SYMBOL(register_snap_client);
EXPORT_SYMBOL(unregister_snap_client);
 
static int __init snap_init(void)
{
snap_dl=register_8022_client(0xAA, snap_rcv);
if(snap_dl==NULL)
printk("SNAP - unable to register with 802.2\n");
return 0;
}
module_init(snap_init);
 
/*
* Register SNAP clients. We don't yet use this for IP.
*/
 
struct datalink_proto *register_snap_client(unsigned char *desc, int (*rcvfunc)(struct sk_buff *, struct net_device *, struct packet_type *))
{
struct datalink_proto *proto;
 
if (find_snap_client(desc) != NULL)
return NULL;
 
proto = (struct datalink_proto *) kmalloc(sizeof(*proto), GFP_ATOMIC);
if (proto != NULL)
{
memcpy(proto->type, desc,5);
proto->type_len = 5;
proto->rcvfunc = rcvfunc;
proto->header_length = 5+snap_dl->header_length;
proto->datalink_header = snap_datalink_header;
proto->string_name = "SNAP";
proto->next = snap_list;
snap_list = proto;
}
 
return proto;
}
 
/*
* Unregister SNAP clients. Protocols no longer want to play with us ...
*/
 
void unregister_snap_client(unsigned char *desc)
{
struct datalink_proto **clients = &snap_list;
struct datalink_proto *tmp;
unsigned long flags;
 
save_flags(flags);
cli();
 
while ((tmp = *clients) != NULL)
{
if (memcmp(tmp->type,desc,5) == 0)
{
*clients = tmp->next;
kfree(tmp);
break;
}
else
clients = &tmp->next;
}
 
restore_flags(flags);
}
/TODO
0,0 → 1,29
Remaining Problems:
 
1. Serialization of access to variables in the llc structure
by mac_data_indicate(), timer expired functions, and data_request() .
There is not serialization of any kind right now.
While testing, I have not seen any problems that stem from this lack of
serialization, but it wories me...
 
2. The code is currently able to handle one connection only,
there is more work in register_cl2llc_client() to make a chain
of llc structures and in mac_data_indicate() to find back
the llc structure addressed by an incoming frame.
According to IEEE, connections are identified by (remote mac + local mac
+ dsap + ssap). dsap and ssap do not seem important: existing applications
always use the same dsap/ssap. Its probably sufficient to index on
the remote mac only.
3. There is no test to see if the transmit window is full in data_request()
as described in the doc p73, "7.5.1 Sending I PDUs" 3th alinea.
The pdus presented to data_request() could probably go on the
awaiting-transmit-queue (atq). The real difficulty is coding a test
to see if the transmit window is used up and to send the queue
when space in the window becomes available.
As I have no network layer that can generate a continous flow of pdus it is
difficult to simulate a remote busy condition and hence to test the code
to handle it.
4. A simple flow control algorithm, steering the size of the transmit
window would be nice to have.
/tr.c
0,0 → 1,558
/*
* NET3: Token ring device handling subroutines
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
* Fixes: 3 Feb 97 Paul Norton <pnorton@cts.com> Minor routing fixes.
* Added rif table to /proc/net/tr_rif and rif timeout to
* /proc/sys/net/token-ring/rif_timeout.
* 22 Jun 98 Paul Norton <p.norton@computer.org> Rearranged
* tr_header and tr_type_trans to handle passing IPX SNAP and
* 802.2 through the correct layers. Eliminated tr_reformat.
*
*/
 
#include <asm/uaccess.h>
#include <asm/system.h>
#include <linux/config.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/string.h>
#include <linux/mm.h>
#include <linux/socket.h>
#include <linux/in.h>
#include <linux/inet.h>
#include <linux/netdevice.h>
#include <linux/trdevice.h>
#include <linux/skbuff.h>
#include <linux/errno.h>
#include <linux/timer.h>
#include <linux/net.h>
#include <linux/proc_fs.h>
#include <linux/init.h>
#include <net/arp.h>
 
void tr_source_route(struct sk_buff *skb, struct trh_hdr *trh,
struct net_device *dev);
static void tr_add_rif_info(struct trh_hdr *trh, struct net_device *dev);
static void rif_check_expire(unsigned long dummy);
 
#define TR_SR_DEBUG 0
 
typedef struct rif_cache_s *rif_cache;
 
/*
* Each RIF entry we learn is kept this way
*/
struct rif_cache_s {
unsigned char addr[TR_ALEN];
int iface;
__u16 rcf;
__u16 rseg[8];
rif_cache next;
unsigned long last_used;
unsigned char local_ring;
};
 
#define RIF_TABLE_SIZE 32
 
/*
* We hash the RIF cache 32 ways. We do after all have to look it
* up a lot.
*/
static rif_cache rif_table[RIF_TABLE_SIZE];
static spinlock_t rif_lock = SPIN_LOCK_UNLOCKED;
 
#define RIF_TIMEOUT 60*10*HZ
#define RIF_CHECK_INTERVAL 60*HZ
 
/*
* Garbage disposal timer.
*/
static struct timer_list rif_timer;
 
int sysctl_tr_rif_timeout = RIF_TIMEOUT;
 
/*
* Put the headers on a token ring packet. Token ring source routing
* makes this a little more exciting than on ethernet.
*/
int tr_header(struct sk_buff *skb, struct net_device *dev, unsigned short type,
void *daddr, void *saddr, unsigned len)
{
struct trh_hdr *trh;
int hdr_len;
 
/*
* Add the 802.2 SNAP header if IP as the IPv4/IPv6 code calls
* dev->hard_header directly.
*/
if (type == ETH_P_IP || type == ETH_P_IPV6 || type == ETH_P_ARP)
{
struct trllc *trllc=(struct trllc *)(trh+1);
 
hdr_len = sizeof(struct trh_hdr) + sizeof(struct trllc);
trh = (struct trh_hdr *)skb_push(skb, hdr_len);
trllc = (struct trllc *)(trh+1);
trllc->dsap = trllc->ssap = EXTENDED_SAP;
trllc->llc = UI_CMD;
trllc->protid[0] = trllc->protid[1] = trllc->protid[2] = 0x00;
trllc->ethertype = htons(type);
}
else
{
hdr_len = sizeof(struct trh_hdr);
trh = (struct trh_hdr *)skb_push(skb, hdr_len);
}
 
trh->ac=AC;
trh->fc=LLC_FRAME;
 
if(saddr)
memcpy(trh->saddr,saddr,dev->addr_len);
else
memcpy(trh->saddr,dev->dev_addr,dev->addr_len);
 
/*
* Build the destination and then source route the frame
*/
if(daddr)
{
memcpy(trh->daddr,daddr,dev->addr_len);
tr_source_route(skb,trh,dev);
return(hdr_len);
}
 
return -hdr_len;
}
/*
* A neighbour discovery of some species (eg arp) has completed. We
* can now send the packet.
*/
int tr_rebuild_header(struct sk_buff *skb)
{
struct trh_hdr *trh=(struct trh_hdr *)skb->data;
struct trllc *trllc=(struct trllc *)(skb->data+sizeof(struct trh_hdr));
struct net_device *dev = skb->dev;
 
/*
* FIXME: We don't yet support IPv6 over token rings
*/
if(trllc->ethertype != htons(ETH_P_IP)) {
printk("tr_rebuild_header: Don't know how to resolve type %04X addresses ?\n",(unsigned int)htons(trllc->ethertype));
return 0;
}
 
#ifdef CONFIG_INET
if(arp_find(trh->daddr, skb)) {
return 1;
}
else
#endif
{
tr_source_route(skb,trh,dev);
return 0;
}
}
/*
* Some of this is a bit hackish. We intercept RIF information
* used for source routing. We also grab IP directly and don't feed
* it via SNAP.
*/
unsigned short tr_type_trans(struct sk_buff *skb, struct net_device *dev)
{
 
struct trh_hdr *trh=(struct trh_hdr *)skb->data;
struct trllc *trllc;
unsigned riflen=0;
skb->mac.raw = skb->data;
if(trh->saddr[0] & TR_RII)
riflen = (ntohs(trh->rcf) & TR_RCF_LEN_MASK) >> 8;
 
trllc = (struct trllc *)(skb->data+sizeof(struct trh_hdr)-TR_MAXRIFLEN+riflen);
 
skb_pull(skb,sizeof(struct trh_hdr)-TR_MAXRIFLEN+riflen);
 
if(*trh->daddr & 0x80)
{
if(!memcmp(trh->daddr,dev->broadcast,TR_ALEN))
skb->pkt_type=PACKET_BROADCAST;
else
skb->pkt_type=PACKET_MULTICAST;
}
else if ( (trh->daddr[0] & 0x01) && (trh->daddr[1] & 0x00) && (trh->daddr[2] & 0x5E))
{
skb->pkt_type=PACKET_MULTICAST;
}
else if(dev->flags & IFF_PROMISC)
{
if(memcmp(trh->daddr, dev->dev_addr, TR_ALEN))
skb->pkt_type=PACKET_OTHERHOST;
}
 
if ((skb->pkt_type != PACKET_BROADCAST) &&
(skb->pkt_type != PACKET_MULTICAST))
tr_add_rif_info(trh,dev) ;
 
/*
* Strip the SNAP header from ARP packets since we don't
* pass them through to the 802.2/SNAP layers.
*/
 
if (trllc->dsap == EXTENDED_SAP &&
(trllc->ethertype == ntohs(ETH_P_IP) ||
trllc->ethertype == ntohs(ETH_P_IPV6) ||
trllc->ethertype == ntohs(ETH_P_ARP)))
{
skb_pull(skb, sizeof(struct trllc));
return trllc->ethertype;
}
 
return ntohs(ETH_P_802_2);
}
 
/*
* We try to do source routing...
*/
 
void tr_source_route(struct sk_buff *skb, struct trh_hdr *trh,
struct net_device *dev)
{
int i, slack;
unsigned int hash;
rif_cache entry;
unsigned char *olddata;
unsigned char mcast_func_addr[] = {0xC0,0x00,0x00,0x04,0x00,0x00};
unsigned long flags ;
spin_lock_irqsave(&rif_lock,flags);
 
/*
* Broadcasts are single route as stated in RFC 1042
*/
if( (!memcmp(&(trh->daddr[0]),&(dev->broadcast[0]),TR_ALEN)) ||
(!memcmp(&(trh->daddr[0]),&(mcast_func_addr[0]), TR_ALEN)) )
{
trh->rcf=htons((((sizeof(trh->rcf)) << 8) & TR_RCF_LEN_MASK)
| TR_RCF_FRAME2K | TR_RCF_LIMITED_BROADCAST);
trh->saddr[0]|=TR_RII;
}
else
{
for(i=0,hash=0;i<TR_ALEN;hash+=trh->daddr[i++]);
hash&=RIF_TABLE_SIZE-1;
/*
* Walk the hash table and look for an entry
*/
for(entry=rif_table[hash];entry && memcmp(&(entry->addr[0]),&(trh->daddr[0]),TR_ALEN);entry=entry->next);
 
/*
* If we found an entry we can route the frame.
*/
if(entry)
{
#if TR_SR_DEBUG
printk("source routing for %02X:%02X:%02X:%02X:%02X:%02X\n",trh->daddr[0],
trh->daddr[1],trh->daddr[2],trh->daddr[3],trh->daddr[4],trh->daddr[5]);
#endif
if(!entry->local_ring && (ntohs(entry->rcf) & TR_RCF_LEN_MASK) >> 8)
{
trh->rcf=entry->rcf;
memcpy(&trh->rseg[0],&entry->rseg[0],8*sizeof(unsigned short));
trh->rcf^=htons(TR_RCF_DIR_BIT);
trh->rcf&=htons(0x1fff); /* Issam Chehab <ichehab@madge1.demon.co.uk> */
 
trh->saddr[0]|=TR_RII;
#if TR_SR_DEBUG
printk("entry found with rcf %04x\n", entry->rcf);
}
else
{
printk("entry found but without rcf length, local=%02x\n", entry->local_ring);
#endif
}
entry->last_used=jiffies;
}
else
{
/*
* Without the information we simply have to shout
* on the wire. The replies should rapidly clean this
* situation up.
*/
trh->rcf=htons((((sizeof(trh->rcf)) << 8) & TR_RCF_LEN_MASK)
| TR_RCF_FRAME2K | TR_RCF_LIMITED_BROADCAST);
trh->saddr[0]|=TR_RII;
#if TR_SR_DEBUG
printk("no entry in rif table found - broadcasting frame\n");
#endif
}
}
 
/* Compress the RIF here so we don't have to do it in the driver(s) */
if (!(trh->saddr[0] & 0x80))
slack = 18;
else
slack = 18 - ((ntohs(trh->rcf) & TR_RCF_LEN_MASK)>>8);
olddata = skb->data;
spin_unlock_irqrestore(&rif_lock,flags);
 
skb_pull(skb, slack);
memmove(skb->data, olddata, sizeof(struct trh_hdr) - slack);
}
 
/*
* We have learned some new RIF information for our source
* routing.
*/
static void tr_add_rif_info(struct trh_hdr *trh, struct net_device *dev)
{
int i;
unsigned int hash, rii_p = 0;
rif_cache entry;
unsigned long flags;
 
spin_lock_irqsave(&rif_lock, flags);
/*
* Firstly see if the entry exists
*/
 
if(trh->saddr[0] & TR_RII)
{
trh->saddr[0]&=0x7f;
if (((ntohs(trh->rcf) & TR_RCF_LEN_MASK) >> 8) > 2)
{
rii_p = 1;
}
}
 
for(i=0,hash=0;i<TR_ALEN;hash+=trh->saddr[i++]);
hash&=RIF_TABLE_SIZE-1;
for(entry=rif_table[hash];entry && memcmp(&(entry->addr[0]),&(trh->saddr[0]),TR_ALEN);entry=entry->next);
 
if(entry==NULL)
{
#if TR_SR_DEBUG
printk("adding rif_entry: addr:%02X:%02X:%02X:%02X:%02X:%02X rcf:%04X\n",
trh->saddr[0],trh->saddr[1],trh->saddr[2],
trh->saddr[3],trh->saddr[4],trh->saddr[5],
ntohs(trh->rcf));
#endif
/*
* Allocate our new entry. A failure to allocate loses
* use the information. This is harmless.
*
* FIXME: We ought to keep some kind of cache size
* limiting and adjust the timers to suit.
*/
entry=kmalloc(sizeof(struct rif_cache_s),GFP_ATOMIC);
 
if(!entry)
{
printk(KERN_DEBUG "tr.c: Couldn't malloc rif cache entry !\n");
spin_unlock_irqrestore(&rif_lock,flags);
return;
}
 
memcpy(&(entry->addr[0]),&(trh->saddr[0]),TR_ALEN);
entry->iface = dev->ifindex;
entry->next=rif_table[hash];
entry->last_used=jiffies;
rif_table[hash]=entry;
 
if (rii_p)
{
entry->rcf = trh->rcf & htons((unsigned short)~TR_RCF_BROADCAST_MASK);
memcpy(&(entry->rseg[0]),&(trh->rseg[0]),8*sizeof(unsigned short));
entry->local_ring = 0;
trh->saddr[0]|=TR_RII; /* put the routing indicator back for tcpdump */
}
else
{
entry->local_ring = 1;
}
}
else /* Y. Tahara added */
{
/*
* Update existing entries
*/
if (!entry->local_ring)
if (entry->rcf != (trh->rcf & htons((unsigned short)~TR_RCF_BROADCAST_MASK)) &&
!(trh->rcf & htons(TR_RCF_BROADCAST_MASK)))
{
#if TR_SR_DEBUG
printk("updating rif_entry: addr:%02X:%02X:%02X:%02X:%02X:%02X rcf:%04X\n",
trh->saddr[0],trh->saddr[1],trh->saddr[2],
trh->saddr[3],trh->saddr[4],trh->saddr[5],
ntohs(trh->rcf));
#endif
entry->rcf = trh->rcf & htons((unsigned short)~TR_RCF_BROADCAST_MASK);
memcpy(&(entry->rseg[0]),&(trh->rseg[0]),8*sizeof(unsigned short));
}
entry->last_used=jiffies;
}
spin_unlock_irqrestore(&rif_lock,flags);
}
 
/*
* Scan the cache with a timer and see what we need to throw out.
*/
 
static void rif_check_expire(unsigned long dummy)
{
int i;
unsigned long now=jiffies;
unsigned long flags ;
 
spin_lock_irqsave(&rif_lock,flags);
for(i=0; i < RIF_TABLE_SIZE;i++)
{
rif_cache entry, *pentry=rif_table+i;
while((entry=*pentry))
{
/*
* Out it goes
*/
if((now-entry->last_used) > sysctl_tr_rif_timeout)
{
*pentry=entry->next;
kfree(entry);
}
else
pentry=&entry->next;
}
}
spin_unlock_irqrestore(&rif_lock,flags);
 
/*
* Reset the timer
*/
mod_timer(&rif_timer, jiffies+sysctl_tr_rif_timeout);
 
}
 
/*
* Generate the /proc/net information for the token ring RIF
* routing.
*/
#ifndef CONFIG_PROC_FS
static int rif_get_info(char *buffer,char **start, off_t offset, int length) { return 0;}
#else
static int rif_get_info(char *buffer,char **start, off_t offset, int length)
{
int len=0;
off_t begin=0;
off_t pos=0;
int size,i,j,rcf_len,segment,brdgnmb;
unsigned long now=jiffies;
unsigned long flags;
 
rif_cache entry;
 
size=sprintf(buffer,
"if TR address TTL rcf routing segments\n");
pos+=size;
len+=size;
 
spin_lock_irqsave(&rif_lock, flags);
for(i=0;i < RIF_TABLE_SIZE;i++)
{
for(entry=rif_table[i];entry;entry=entry->next) {
struct net_device *dev = __dev_get_by_index(entry->iface);
 
size=sprintf(buffer+len,"%s %02X:%02X:%02X:%02X:%02X:%02X %7li ",
dev?dev->name:"?",entry->addr[0],entry->addr[1],entry->addr[2],entry->addr[3],entry->addr[4],entry->addr[5],
sysctl_tr_rif_timeout-(now-entry->last_used));
len+=size;
pos=begin+len;
if (entry->local_ring)
size=sprintf(buffer+len,"local\n");
else {
size=sprintf(buffer+len,"%04X", ntohs(entry->rcf));
rcf_len = ((ntohs(entry->rcf) & TR_RCF_LEN_MASK)>>8)-2;
if (rcf_len)
rcf_len >>= 1;
for(j = 1; j < rcf_len; j++) {
if(j==1) {
segment=ntohs(entry->rseg[j-1])>>4;
len+=size;
pos=begin+len;
size=sprintf(buffer+len," %03X",segment);
};
segment=ntohs(entry->rseg[j])>>4;
brdgnmb=ntohs(entry->rseg[j-1])&0x00f;
len+=size;
pos=begin+len;
size=sprintf(buffer+len,"-%01X-%03X",brdgnmb,segment);
}
len+=size;
pos=begin+len;
size=sprintf(buffer+len,"\n");
}
len+=size;
pos=begin+len;
 
if(pos<offset)
{
len=0;
begin=pos;
}
if(pos>offset+length)
break;
}
if(pos>offset+length)
break;
}
spin_unlock_irqrestore(&rif_lock,flags);
 
*start=buffer+(offset-begin); /* Start of wanted data */
len-=(offset-begin); /* Start slop */
if(len>length)
len=length; /* Ending slop */
if (len<0)
len=0;
return len;
}
#endif
 
/*
* Called during bootup. We don't actually have to initialise
* too much for this.
*/
 
static int __init rif_init(void)
{
rif_timer.expires = RIF_TIMEOUT;
rif_timer.data = 0L;
rif_timer.function = rif_check_expire;
init_timer(&rif_timer);
add_timer(&rif_timer);
 
proc_net_create("tr_rif",0,rif_get_info);
return 0;
}
 
module_init(rif_init);
/fc.c
0,0 → 1,135
/*
* NET3: Fibre Channel device handling subroutines
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
* Vineet Abraham <vma@iol.unh.edu>
* v 1.0 03/22/99
*/
 
#include <linux/config.h>
#include <linux/module.h>
 
#include <asm/uaccess.h>
#include <asm/system.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/string.h>
#include <linux/mm.h>
#include <linux/socket.h>
#include <linux/in.h>
#include <linux/inet.h>
#include <linux/netdevice.h>
#include <linux/fcdevice.h>
#include <linux/skbuff.h>
#include <linux/errno.h>
#include <linux/timer.h>
#include <linux/net.h>
#include <linux/proc_fs.h>
#include <linux/init.h>
#include <net/arp.h>
 
/*
* Put the headers on a Fibre Channel packet.
*/
int fc_header(struct sk_buff *skb, struct net_device *dev, unsigned short type,
void *daddr, void *saddr, unsigned len)
{
struct fch_hdr *fch;
int hdr_len;
 
/*
* Add the 802.2 SNAP header if IP as the IPv4 code calls
* dev->hard_header directly.
*/
if (type == ETH_P_IP || type == ETH_P_ARP)
{
struct fcllc *fcllc=(struct fcllc *)(fch+1);
 
hdr_len = sizeof(struct fch_hdr) + sizeof(struct fcllc);
fch = (struct fch_hdr *)skb_push(skb, hdr_len);
fcllc = (struct fcllc *)(fch+1);
fcllc->dsap = fcllc->ssap = EXTENDED_SAP;
fcllc->llc = UI_CMD;
fcllc->protid[0] = fcllc->protid[1] = fcllc->protid[2] = 0x00;
fcllc->ethertype = htons(type);
}
else
{
hdr_len = sizeof(struct fch_hdr);
fch = (struct fch_hdr *)skb_push(skb, hdr_len);
}
 
if(saddr)
memcpy(fch->saddr,saddr,dev->addr_len);
else
memcpy(fch->saddr,dev->dev_addr,dev->addr_len);
 
if(daddr)
{
memcpy(fch->daddr,daddr,dev->addr_len);
return(hdr_len);
}
return -hdr_len;
}
/*
* A neighbour discovery of some species (eg arp) has completed. We
* can now send the packet.
*/
int fc_rebuild_header(struct sk_buff *skb)
{
struct fch_hdr *fch=(struct fch_hdr *)skb->data;
struct fcllc *fcllc=(struct fcllc *)(skb->data+sizeof(struct fch_hdr));
if(fcllc->ethertype != htons(ETH_P_IP)) {
printk("fc_rebuild_header: Don't know how to resolve type %04X addresses ?\n",(unsigned int)htons(fcllc->ethertype));
return 0;
}
#ifdef CONFIG_INET
return arp_find(fch->daddr, skb);
#else
return 0;
#endif
}
 
EXPORT_SYMBOL(fc_type_trans);
 
unsigned short
fc_type_trans(struct sk_buff *skb, struct net_device *dev)
{
struct fch_hdr *fch = (struct fch_hdr *)skb->data;
struct fcllc *fcllc;
 
skb->mac.raw = skb->data;
fcllc = (struct fcllc *)(skb->data + sizeof (struct fch_hdr) + 2);
skb_pull(skb, sizeof (struct fch_hdr) + 2);
 
if (*fch->daddr & 1) {
if (!memcmp(fch->daddr, dev->broadcast, FC_ALEN))
skb->pkt_type = PACKET_BROADCAST;
else
skb->pkt_type = PACKET_MULTICAST;
} else if (dev->flags & IFF_PROMISC) {
if (memcmp(fch->daddr, dev->dev_addr, FC_ALEN))
skb->pkt_type = PACKET_OTHERHOST;
}
 
/*
* Strip the SNAP header from ARP packets since we don't pass
* them through to the 802.2/SNAP layers.
*/
if (fcllc->dsap == EXTENDED_SAP &&
(fcllc->ethertype == ntohs(ETH_P_IP) ||
fcllc->ethertype == ntohs(ETH_P_ARP))) {
skb_pull(skb, sizeof (struct fcllc));
return fcllc->ethertype;
}
 
return ntohs(ETH_P_802_2);
}
/llc_sendpdu.c
0,0 → 1,357
/*
* NET An implementation of the IEEE 802.2 LLC protocol for the
* LINUX operating system. LLC is implemented as a set of
* state machines and callbacks for higher networking layers.
*
* llc_sendpdu(), llc_sendipdu(), resend() + queue handling code
*
* Written by Tim Alpaerts, Tim_Alpaerts@toyota-motor-europe.com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
* Changes
* Alan Cox : Chainsawed into Linux format, style
* Added llc_ to function names
*/
 
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/netdevice.h>
#include <linux/skbuff.h>
#include <net/p8022.h>
#include <linux/stat.h>
#include <asm/byteorder.h>
#include <net/llc_frame.h>
#include <net/llc.h>
 
static unsigned char cntl_byte_encode[] =
{
0x00, /* I_CMD */
0x01, /* RR_CMD */
0x05, /* RNR_CMD */
0x09, /* REJ_CMD */
0x43, /* DISC_CMD */
0x7F, /* SABME_CMD */
0x00, /* I_RSP */
0x01, /* RR_RSP */
0x05, /* RNR_RSP */
0x09, /* REJ_RSP */
0x63, /* UA_RSP */
0x0F, /* DM_RSP */
0x87, /* FRMR_RSP */
0xFF, /* BAD_FRAME */
0x03, /* UI_CMD */
0xBF, /* XID_CMD */
0xE3, /* TEST_CMD */
0xBF, /* XID_RSP */
0xE3 /* TEST_RSP */
};
 
static unsigned char fr_length_encode[] =
{
0x04, /* I_CMD */
0x04, /* RR_CMD */
0x04, /* RNR_CMD */
0x04, /* REJ_CMD */
0x03, /* DISC_CMD */
0x03, /* SABME_CMD */
0x04, /* I_RSP */
0x04, /* RR_RSP */
0x04, /* RNR_RSP */
0x04, /* REJ_RSP */
0x03, /* UA_RSP */
0x03, /* DM_RSP */
0x03, /* FRMR_RSP */
0x00, /* BAD_FRAME */
0x03, /* UI_CMD */
0x03, /* XID_CMD */
0x03, /* TEST_CMD */
0x03, /* XID_RSP */
0x03 /* TEST_RSP */
};
 
static unsigned char cr_bit_encode[] = {
0x00, /* I_CMD */
0x00, /* RR_CMD */
0x00, /* RNR_CMD */
0x00, /* REJ_CMD */
0x00, /* DISC_CMD */
0x00, /* SABME_CMD */
0x01, /* I_RSP */
0x01, /* RR_RSP */
0x01, /* RNR_RSP */
0x01, /* REJ_RSP */
0x01, /* UA_RSP */
0x01, /* DM_RSP */
0x01, /* FRMR_RSP */
0x00, /* BAD_FRAME */
0x00, /* UI_CMD */
0x00, /* XID_CMD */
0x00, /* TEST_CMD */
0x01, /* XID_RSP */
0x01 /* TEST_RSP */
};
 
/*
* Sendpdu() constructs an output frame in a new skb and
* gives it to the MAC layer for transmission.
* This function is not used to send I pdus.
* No queues are updated here, nothing is saved for retransmission.
*
* Parameter pf controls both the poll/final bit and dsap
* fields in the output pdu.
* The dsap trick was needed to implement XID_CMD send with
* zero dsap field as described in doc 6.6 item 1 of enum.
*/
 
void llc_sendpdu(llcptr lp, char type, char pf, int data_len, char *pdu_data)
{
frameptr fr; /* ptr to output pdu buffer */
unsigned short int fl; /* frame length == 802.3 "length" value */
struct sk_buff *skb;
 
fl = data_len + fr_length_encode[(int)type];
skb = alloc_skb(16 + fl, GFP_ATOMIC);
if (skb != NULL)
{
skb->dev = lp->dev;
skb_reserve(skb, 16);
fr = (frameptr) skb_put(skb, fl);
memset(fr, 0, fl);
/*
* Construct 802.2 header
*/
if (pf & 0x02)
fr->pdu_hdr.dsap = 0;
else
fr->pdu_hdr.dsap = lp->remote_sap;
fr->pdu_hdr.ssap = lp->local_sap + cr_bit_encode[(int)type];
fr->pdu_cntl.byte1 = cntl_byte_encode[(int)type];
/*
* Fill in pflag and seq nbrs:
*/
if (IS_SFRAME(fr))
{
/* case S-frames */
if (pf & 0x01)
fr->i_hdr.i_pflag = 1;
fr->i_hdr.nr = lp->vr;
}
else
{
/* case U frames */
if (pf & 0x01)
fr->u_hdr.u_pflag = 1;
}
if (data_len > 0)
{ /* append data if any */
if (IS_UFRAME(fr))
{
memcpy(fr->u_hdr.u_info, pdu_data, data_len);
}
else
{
memcpy(fr->i_hdr.is_info, pdu_data, data_len);
}
}
lp->dev->hard_header(skb, lp->dev, ETH_P_802_3,
lp->remote_mac, NULL, fl);
skb->dev=lp->dev;
dev_queue_xmit(skb);
}
else
printk(KERN_DEBUG "cl2llc: skb_alloc() in llc_sendpdu() failed\n");
}
 
void llc_xid_request(llcptr lp, char opt, int ll, char * data)
{
llc_sendpdu(lp, XID_CMD, opt, ll, data);
}
 
void llc_test_request(llcptr lp, int ll, char * data)
{
llc_sendpdu(lp, TEST_CMD, 0, ll, data);
}
 
void llc_unit_data_request(llcptr lp, int ll, char * data)
{
llc_sendpdu(lp, UI_CMD, 0, ll, data);
}
 
 
/*
* llc_sendipdu() Completes an I pdu in an existing skb and gives it
* to the MAC layer for transmission.
* Parameter "type" must be either I_CMD or I_RSP.
* The skb is not freed after xmit, it is kept in case a retransmission
* is requested. If needed it can be picked up again from the rtq.
*/
 
void llc_sendipdu(llcptr lp, char type, char pf, struct sk_buff *skb)
{
frameptr fr; /* ptr to output pdu buffer */
struct sk_buff *tmp;
fr = (frameptr) skb->data;
 
fr->pdu_hdr.dsap = lp->remote_sap;
fr->pdu_hdr.ssap = lp->local_sap + cr_bit_encode[(int)type];
fr->pdu_cntl.byte1 = cntl_byte_encode[(int)type];
if (pf)
fr->i_hdr.i_pflag = 1; /* p/f and seq numbers */
fr->i_hdr.nr = lp->vr;
fr->i_hdr.ns = lp->vs;
lp->vs++;
if (lp->vs > 127)
lp->vs = 0;
lp->dev->hard_header(skb, lp->dev, ETH_P_802_3,
lp->remote_mac, NULL, skb->len);
ADD_TO_RTQ(skb); /* add skb to the retransmit queue */
tmp=skb_clone(skb, GFP_ATOMIC);
if(tmp!=NULL)
{
tmp->dev=lp->dev;
dev_queue_xmit(tmp);
}
}
 
 
/*
* Resend_ipdu() will resend the pdus in the retransmit queue (rtq)
* the return value is the number of pdus resend.
* ack_nr is N(R) of 1st pdu to resent.
* Type is I_CMD or I_RSP for 1st pdu resent.
* p is p/f flag 0 or 1 for 1st pdu resent.
* All subsequent pdus will be sent as I_CMDs with p/f set to 0
*/
 
int llc_resend_ipdu(llcptr lp, unsigned char ack_nr, unsigned char type, char p)
{
struct sk_buff *skb,*tmp;
int resend_count;
frameptr fr;
unsigned long flags;
 
resend_count = 0;
save_flags(flags);
cli();
skb = skb_peek(&lp->rtq);
 
while(skb && skb != (struct sk_buff *)&lp->rtq)
{
fr = (frameptr) (skb->data + lp->dev->hard_header_len);
if (resend_count == 0)
{
/*
* Resending 1st pdu:
*/
 
if (p)
fr->i_hdr.i_pflag = 1;
else
fr->i_hdr.i_pflag = 0;
if (type == I_CMD)
fr->pdu_hdr.ssap = fr->pdu_hdr.ssap & 0xfe;
else
fr->pdu_hdr.ssap = fr->pdu_hdr.ssap | 0x01;
}
else
{
/*
* Resending pdu 2...n
*/
 
fr->pdu_hdr.ssap = fr->pdu_hdr.ssap & 0xfe;
fr->i_hdr.i_pflag = 0;
}
fr->i_hdr.nr = lp->vr;
fr->i_hdr.ns = lp->vs;
lp->vs++;
if (lp->vs > 127)
lp->vs = 0;
tmp=skb_clone(skb, GFP_ATOMIC);
if(tmp!=NULL)
{
tmp->dev = lp->dev;
dev_queue_xmit(tmp);
}
resend_count++;
skb = skb->next;
}
restore_flags(flags);
return resend_count;
}
 
/* ************** internal queue management code ****************** */
 
 
/*
* Remove one skb from the front of the awaiting transmit queue
* (this is the skb longest on the queue) and return a pointer to
* that skb.
*/
 
struct sk_buff *llc_pull_from_atq(llcptr lp)
{
return skb_dequeue(&lp->atq);
}
/*
* Free_acknowledged_skbs(), remove from retransmit queue (rtq)
* and free all skbs with an N(S) chronologicaly before 'pdu_ack'.
* The return value is the number of pdus acknowledged.
*/
int llc_free_acknowledged_skbs(llcptr lp, unsigned char pdu_ack)
{
struct sk_buff *pp;
frameptr fr;
int ack_count;
unsigned char ack; /* N(S) of most recently ack'ed pdu */
unsigned char ns_save;
unsigned long flags;
 
if (pdu_ack > 0)
ack = pdu_ack -1;
else
ack = 127;
 
ack_count = 0;
 
save_flags(flags);
cli();
 
pp = skb_dequeue(&lp->rtq);
while (pp != NULL)
{
/*
* Locate skb with N(S) == ack
*/
 
/*
* BUG: FIXME - use skb->h.*
*/
fr = (frameptr) (pp->data + lp->dev->hard_header_len);
ns_save = fr->i_hdr.ns;
 
kfree_skb(pp);
ack_count++;
 
if (ns_save == ack)
break;
pp = skb_dequeue(&lp->rtq);
}
restore_flags(flags);
return ack_count;
}
 
/Makefile
0,0 → 1,61
#
# Makefile for the Linux 802.x protocol layers.
#
# Note! Dependencies are done automagically by 'make dep', which also
# removes any old dependencies. DON'T put your own dependencies here
# unless it's something special (ie not a .c file).
#
# Note 2! The CFLAGS definition is now in the main makefile...
 
O_TARGET := 802.o
 
export-objs = llc_macinit.o p8022.o psnap.o fc.o
 
obj-y = p8023.o
 
obj-$(CONFIG_SYSCTL) += sysctl_net_802.o
obj-$(CONFIG_LLC) += llc_sendpdu.o llc_utility.o cl2llc.o llc_macinit.o
ifeq ($(CONFIG_SYSCTL),y)
obj-y += sysctl_net_802.o
endif
 
ifeq ($(CONFIG_LLC),y)
subdir-y += transit
obj-y += llc_sendpdu.o llc_utility.o cl2llc.o llc_macinit.o
SNAP = y
endif
 
ifdef CONFIG_TR
obj-y += tr.o
SNAP=y
endif
 
ifdef CONFIG_NET_FC
obj-y += fc.o
endif
 
ifdef CONFIG_FDDI
obj-y += fddi.o
endif
 
ifdef CONFIG_HIPPI
obj-y += hippi.o
endif
 
ifdef CONFIG_IPX
SNAP=y
endif
 
ifdef CONFIG_ATALK
SNAP=y
endif
 
ifeq ($(SNAP),y)
obj-y += p8022.o psnap.o
endif
 
include $(TOPDIR)/Rules.make
 
cl2llc.c: cl2llc.pre
@rm -f $@
sed -f ./pseudo/opcd2num.sed cl2llc.pre >cl2llc.c
/llc_utility.c
0,0 → 1,253
/*
* NET An implementation of the IEEE 802.2 LLC protocol for the
* LINUX operating system. LLC is implemented as a set of
* state machines and callbacks for higher networking layers.
*
* Small utilities, Linux timer handling.
*
* Written by Tim Alpaerts, Tim_Alpaerts@toyota-motor-europe.com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
* Changes
* Alan Cox : Chainsawed into Linux form.
* Added llc_ function name prefixes.
* Fixed bug in stop/start timer.
* Added llc_cancel_timers for closing
* down an llc
*/
 
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/netdevice.h>
#include <linux/skbuff.h>
#include <linux/proc_fs.h>
#include <linux/stat.h>
#include <net/llc_frame.h>
#include <net/llc.h>
 
int llc_decode_frametype(frameptr fr)
{
if (IS_UFRAME(fr))
{ /* unnumbered cmd/rsp */
switch(fr->u_mm.mm & 0x3B)
{
case 0x1B:
return(SABME_CMD);
break;
case 0x10:
return(DISC_CMD);
break;
case 0x18:
return(UA_RSP);
break;
case 0x03:
return(DM_RSP);
break;
case 0x21:
return(FRMR_RSP);
break;
case 0x00:
return(UI_CMD);
break;
case 0x2B:
if (IS_RSP(fr))
return(XID_RSP);
else
return(XID_CMD);
break;
case 0x38:
if (IS_RSP(fr))
return(TEST_RSP);
else
return(TEST_CMD);
break;
default:
return(BAD_FRAME);
}
}
else if (IS_SFRAME(fr))
{ /* supervisory cmd/rsp */
switch(fr->s_hdr.ss)
{
case 0x00:
if (IS_RSP(fr))
return(RR_RSP);
else
return(RR_CMD);
break;
case 0x02:
if (IS_RSP(fr))
return(REJ_RSP);
else
return(REJ_CMD);
break;
case 0x01:
if (IS_RSP(fr))
return(RNR_RSP);
else
return(RNR_CMD);
break;
default:
return(BAD_FRAME);
}
}
else
{ /* information xfer */
if (IS_RSP(fr))
return(I_RSP);
else
return(I_CMD);
}
}
 
 
/*
* Validate_seq_nos will check N(S) and N(R) to see if they are
* invalid or unexpected.
* "unexpected" is explained on p44 Send State Variable.
* The return value is:
* 4 * invalid N(R) +
* 2 * invalid N(S) +
* 1 * unexpected N(S)
*/
 
int llc_validate_seq_nos(llcptr lp, frameptr fr)
{
int res;
/*
* A U-frame is always good
*/
 
if (IS_UFRAME(fr))
return(0);
 
/*
* For S- and I-frames check N(R):
*/
 
if (fr->i_hdr.nr == lp->vs)
{ /* if N(R) = V(S) */
res = 0; /* N(R) is good */
}
else
{ /* lp->k = transmit window size */
if (lp->vs >= lp->k)
{ /* if window not wrapped around 127 */
if ((fr->i_hdr.nr < lp->vs) &&
(fr->i_hdr.nr > (lp->vs - lp->k)))
res = 0;
else
res = 4; /* N(R) invalid */
}
else
{ /* window wraps around 127 */
if ((fr->i_hdr.nr < lp->vs) ||
(fr->i_hdr.nr > (128 + lp->vs - lp->k)))
res = 0;
else
res = 4; /* N(R) invalid */
}
}
 
/*
* For an I-frame, must check N(S) also:
*/
 
if (IS_IFRAME(fr))
{
if (fr->i_hdr.ns == lp->vr)
return res; /* N(S) good */
if (lp->vr >= lp->rw)
{
/* if receive window not wrapped */
 
if ((fr->i_hdr.ns < lp->vr) &&
(fr->i_hdr.ns > (lp->vr - lp->k)))
res = res +1; /* N(S) unexpected */
else
res = res +2; /* N(S) invalid */
}
else
{
/* Window wraps around 127 */
 
if ((fr->i_hdr.ns < lp->vr) ||
(fr->i_hdr.ns > (128 + lp->vr - lp->k)))
res = res +1; /* N(S) unexpected */
else
res = res +2; /* N(S) invalid */
}
}
return(res);
}
 
/* **************** timer management routines ********************* */
 
static void llc_p_timer_expired(unsigned long ulp)
{
llc_timer_expired((llcptr) ulp, P_TIMER);
}
 
static void llc_rej_timer_expired(unsigned long ulp)
{
llc_timer_expired((llcptr) ulp, REJ_TIMER);
}
 
static void llc_ack_timer_expired(unsigned long ulp)
{
llc_timer_expired((llcptr) ulp, ACK_TIMER);
}
 
static void llc_busy_timer_expired(unsigned long ulp)
{
llc_timer_expired((llcptr) ulp, BUSY_TIMER);
}
 
/* exp_fcn is an array holding the 4 entry points of the
timer expiry routines above.
It is required to keep start_timer() generic.
Thank you cdecl.
*/
 
static void (* exp_fcn[])(unsigned long) =
{
llc_p_timer_expired,
llc_rej_timer_expired,
llc_ack_timer_expired,
llc_busy_timer_expired
};
 
void llc_start_timer(llcptr lp, int t)
{
if (lp->timer_state[t] == TIMER_IDLE)
{
lp->tl[t].expires = jiffies + lp->timer_interval[t];
lp->tl[t].data = (unsigned long) lp;
lp->tl[t].function = exp_fcn[t];
add_timer(&lp->tl[t]);
lp->timer_state[t] = TIMER_RUNNING;
}
}
 
void llc_stop_timer(llcptr lp, int t)
{
if (lp->timer_state[t] == TIMER_RUNNING)
{
del_timer(&lp->tl[t]);
lp->timer_state[t] = TIMER_IDLE;
}
}
 
void llc_cancel_timers(llcptr lp)
{
llc_stop_timer(lp, P_TIMER);
llc_stop_timer(lp, REJ_TIMER);
llc_stop_timer(lp, ACK_TIMER);
llc_stop_timer(lp, BUSY_TIMER);
}
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.