home *** CD-ROM | disk | FTP | other *** search
/ Hacker Chronicles 2 / HACKER2.BIN / 522.L2.H < prev    next >
C/C++ Source or Header  |  1988-05-12  |  19KB  |  322 lines

  1. /**************************************************************************\
  2. *                                                                          *
  3. *                                                                          *
  4. *    *****                      *****                                      *
  5. *      *****                  *****                                        *
  6. *        *****              *****                                          *
  7. *          *****          *****                                            *
  8. *            *****      *****                                              *
  9. *              *****  *****                                                *
  10. *            *****      *****                                              *
  11. *          *****          *****          The Firmware. The Net.            *
  12. *        *****              *****        Portable. Compatible.             *
  13. *      *****                  *****      Public Domain.                    *
  14. *    *****                      *****    By NORD><LINK.                    *
  15. *                                                                          *
  16. *                                                                          *
  17. *                                                                          *
  18. *    L2.H   -   Headerfile Level 2                                         *
  19. *                                                                          *
  20. *    angelegt:      DC4OX                                                  *
  21. *    modifiziert:                                                          *
  22. *                                                                          *
  23. \**************************************************************************/
  24.  
  25.  
  26.  
  27.  
  28.  
  29. /*                                                         Festlegungen   */
  30. /**************************************************************************/
  31.  
  32. #ifdef FIRMWARE
  33. #define L2PNUM   1                      /* TheFirmware :  1 Level-2-Port  */
  34. #else
  35. #define L2PNUM   2                      /* TheNet      :  2 Level-2-Ports */
  36. #endif
  37.  
  38.  
  39.  
  40. #define L2CALEN  6                      /* Laenge Call im Level 2         */
  41. #define L2IDLEN  (L2CALEN + 1)          /* Laenge Call + SSID = ID        */
  42. #define L2INUM   2                      /* Anzahl ID's im an/von-Feld     */
  43. #define L2VNUM   8                      /* Anzahl ID's im via-Feld        */
  44. #define L2ILEN   (L2INUM * L2IDLEN)     /* Laenge an/von-Feld             */
  45. #define L2VLEN   (L2VNUM * L2IDLEN)     /* Laenge via-Feld                */
  46. #define L2AFLEN  (L2ILEN + L2VLEN)      /* Laenge Level 2 Adressfeld      */
  47. #define L2MFLEN  328                    /* maximale Framelaenge,          */
  48.                                         /*   10 * 7 =    70 Bytes Adresse */
  49.                                         /*            +   1 Byte Control  */
  50.                                         /*            +   1 Byte PID      */
  51.                                         /*            + 256 Byte Info     */
  52.                                         /*            -----               */
  53.                                         /*              328               */
  54.  
  55.  
  56.  
  57.                               /* "layer 2 state", (state, s.u.) :         */
  58. #define L2SDSCED    0         /*    disconnected                          */
  59. #define L2SLKSUP    1         /*    link setup                            */
  60. #define L2SFRREJ    2         /*    frame reject                          */
  61. #define L2SDSCRQ    3         /*    disconnect request                    */
  62. #define L2SIXFER    4         /*    information transfer                  */
  63. #define L2SRS       5         /*    REJ sent                              */
  64. #define L2SWA       6         /*    waiting acknowledge                   */
  65. #define L2SDBS      7         /*    device busy                           */
  66. #define L2SRBS      8         /*    remote busy                           */
  67. #define L2SBBS      9         /*    both busy                             */
  68. #define L2SWADBS   10         /*    waiting ack and device busy           */
  69. #define L2SWARBS   11         /*    waiting ack and remote busy           */
  70. #define L2SWABBS   12         /*    waiting ack and both busy             */
  71. #define L2SRSDBS   13         /*    REJ sent and device busy              */
  72. #define L2SRSRBS   14         /*    REJ sent and remote busy              */
  73. #define L2SRSBBS   15         /*    REJ sent and both busy                */
  74.  
  75.  
  76.  
  77.                               /* "layer 2 message", Status vom Level 2 :  */
  78. #define L2MNIX     0          /*    keine Nachricht                       */
  79. #define L2MCONNT   1          /*    CONNECTED to                          */
  80. #define L2MDISCF   2          /*    DISCONNECTED from                     */
  81. #define L2MBUSYF   3          /*    BUSY from                             */
  82. #define L2MFAILW   4          /*    LINK FAILURE with                     */
  83. #define L2MLRESF   5          /*    LINK RESET from                       */
  84. #define L2MLREST   6          /*    LINK RESET to                         */
  85. #define L2MFRMRF   7          /*    FRAME REJECT from                     */
  86. #define L2MFRMRT   8          /*    FRAME REJECT to                       */
  87. #define L2MBUSYT   9          /*    BUSY to                               */
  88.  
  89.  
  90.  
  91.                               /* "layer 2 control", Frametypen :          */
  92.                               /*                                          */
  93.                               /*                       Command/   Poll/   */
  94.                               /*    Typ       Gruppe   Response   Final   */
  95.                               /* ---------------------------------------- */
  96. #define L2CI       0x00       /*      I         I         C         P     */
  97. #define L2CUI      0x03       /*     UI         U        C/R       P/F    */
  98. #define L2CSABM    0x2F       /*   SABM         U         C         P     */
  99. #define L2CDISC    0x43       /*   DISC         U         C         P     */
  100. #define L2CUA      0x63       /*     UA         U         R         F     */
  101. #define L2CDM      0x0F       /*     DM         U         R         F     */
  102. #define L2CFRMR    0x87       /*   FRMR         U         R         F     */
  103. #define L2CRR      0x01       /*     RR         S        C/R       P/F    */
  104. #define L2CREJ     0x09       /*    REJ         S        C/R       P/F    */
  105. #define L2CRNR     0x05       /*    RNR         S        C/R       P/F    */
  106.  
  107.                               /* "layer 2 control", spezielle Bits :      */
  108. #define L2CPF      0x10       /*   Poll/Final                             */
  109. #define L2CCR      0x80       /*   Command/Response                       */
  110. #define L2CH       0x80       /*   "has been repeated"                    */
  111. #define L2CEOA     0x01       /*   End of Address                         */
  112.  
  113.                               /* "layer 2 control", Masken :              */
  114. #define L2CNOIM    0x01       /*   "no I mask", kein I-Frame              */
  115. #define L2CNOSM    0x02       /*   "no S mask", kein S-Frame              */
  116.  
  117.                               /* "layer 2 control", Protokollidentifier   */
  118. #define L2CPID     0xF0       /*   PID                                    */
  119.  
  120.                               /* "layer 2 control", Flags (flag, s.u.) :  */
  121. #define L2FL3LNK   0x20       /*   Link ist Layer-3-Link                  */
  122. #define L2FBUSY    0x40       /*   Device busy (ich !)                    */
  123. #define L2FDSLE    0x80       /*   "disc if send list empty"              */
  124.  
  125.                               /* im Framebufferkopf (l2fflag, s.u.) :     */
  126. #define L2FT1ST    0x01       /*   nach Aussendung ist T1 zu starten      */
  127. #define L2FUS      0x02       /*   Sendeframe ist U- oder S-Frame (nicht  */
  128.                               /*   digipeatet)                            */
  129.  
  130.  
  131.  
  132.  
  133.  
  134. /*                                                                Typen   */
  135. /**************************************************************************/
  136.  
  137.  
  138.  
  139. typedef struct lhead          /* "list head", Listenkopf :                */
  140.   {
  141.     struct lhead   *head;     /*   Zeiger auf ersten Eintrag in Liste     */ 
  142.     struct lhead   *tail;     /*   Zeiger auf letzten Eintrag in Liste    */
  143.   } LHEAD;
  144.  
  145.  
  146.  
  147. typedef struct lehead         /* "list entry head", Kopf eines Eintrags   */
  148.   {                           /* in Liste :                               */
  149.     struct lehead   *nextle;  /*   Zeiger auf naechsten Listeneintrag     */ 
  150.     struct lehead   *prevle;  /*   Zeiger auf vorherigen Listeneintrag    */
  151.   } LEHEAD;
  152.  
  153.  
  154.  
  155. typedef struct lnkblk         /* "link block", fuer jeden Level-2-Link :  */
  156.   {
  157.     char     state;           /* Link-State, s.o. L2S...                  */
  158.     char     srcid[L2IDLEN];  /* "source id", eigenes Call/SSID oder      */
  159.                               /* Ident/SSID                               */
  160.     char     dstid[L2IDLEN];  /* "destination id", Call/SSID Gegenstation */
  161.     char     viaidl[L2VLEN+1];/* "via id list", Digipeaterstrecke,        */
  162.                               /* 0-terminiert, Weg zur Gegenstation       */
  163.     char     liport;          /* "link port" - 0 : HDLC, 1 : Crosslink    */
  164.     char     VR;              /* "receive sequence variable", Sequenz-    */
  165.                               /* nummer des naechsten zu empfangenden     */
  166.                               /* I-Frames                                 */
  167.     char     VS;              /* "send sequence variable", Sequenznummer  */
  168.                               /* des naechsten zu sendenden I-Frames      */
  169.     char     lrxdNR;          /* "last received N(R)", zuletzt            */
  170.                               /* empfangenes N(R) = eigene gesendete      */
  171.                               /* I-Frames bis lrxdNR-1 bestaetigt         */
  172.     char     ltxdNR;          /* "last transmitted N(R)", zuletzt         */
  173.                               /* gesendetes N(R) = empfangene I-Frames    */
  174.                               /* bis ltxdNR-1 bestaetigt                  */
  175.     char     tries;           /* aktuelle Anzahl Versuche (RETRY),        */
  176.                               /* hochzaehlend                             */
  177.     char     N2;              /* RETRY, maximale Anzahl Retries           */
  178.     char     k;               /* MAXFRAME, maximale Anzahl unbestaetigter */
  179.                               /* I-Frames                                 */
  180.     char     snglT1;          /* "single T1", T1 ohne Digikette = FRACK   */
  181.     char     V2link;          /* "version 2 link" - 0 : Version 1 Link    */
  182.                               /*                    1 : Version 2 Link    */
  183.     char     RStype;          /* "response supervisory frametype", nach   */
  184.                               /* T2-Ablauf zu sendendes Antwortframe      */
  185.                               /* (RR=0x01, RNR=0x05, REJ=0x09)            */
  186.     char     frmr[3];         /* die 3 FRMR-Infobytes, Sendung u. Empfang */
  187.                               /*   frmr[0] : zurueckgewies. Kontrollfeld  */
  188.                               /*   frmr[1] : V(R) CR V(S) 0               */
  189.                               /*   frmr[2] : 0000ZYXW                     */
  190.     char     flag;            /* Flag (s.o. L2F... )                      */
  191.                               /*   Bit 0 : nicht benutzt                  */
  192.                               /*   Bit 1 : nicht benutzt                  */
  193.                               /*   Bit 2 : nicht benutzt                  */
  194.                               /*   Bit 3 : nicht benutzt                  */
  195.                               /*   Bit 4 : nicht benutzt                  */
  196.                               /*   Bit 5 : 1 = Link ist Level 3 Link      */
  197.                               /*           (festgestellt anhand PID !)    */
  198.                               /*   Bit 6 : 1 = (eigenes) Device busy      */
  199.                               /*   Bit 7 : 1 = Link disconnecten, sobald  */
  200.                               /*           Sendeliste (sendil) leer ist   */
  201.     unsigned initT1;          /* "initial T1", (2 * Anzahl Digis + 1) *   */ 
  202.                               /* snglT1(= FRACK) * 100 in 1/100 sek       */
  203.     unsigned T1;              /* Timer 1, "frame acknowledge interval",   */
  204.                               /* Start :  initT1 + random(),              */
  205.                               /* 0 = inaktiv, 10 msec Downcounter         */
  206.     unsigned T2;              /* Timer T2, "response delay timer",        */
  207.                               /* 0 = inaktiv, 10 msec Downcounter         */
  208.     unsigned T3;              /* Timer T3, "inactive link timer",         */
  209.                               /* 0 = inaktiv, 10 msec Downcounter         */
  210.     unsigned noatou;          /* "no activity timeout",                   */
  211.                               /* nach Ablauf Link disconnecten,           */
  212.                               /* 0 = inaktiv, 1 sec Downcounter           */
  213.     unsigned rcvd;            /* "received", Anzahl empfangener I-Frames  */
  214.                               /* in rcvdil                                */
  215.     unsigned tosend;          /* Anzahl noch nicht gesendete oder         */
  216.                               /* unbestaetigte Frames in sendil           */
  217.     LHEAD    rcvdil;          /* "received info list", richtig            */
  218.                               /* empfangene I-Frames, mit Header/PID      */
  219.     LHEAD    sendil;          /* "send info list", zu sendende I-Frames,  */
  220.                               /* ohne Header/PID, nur Info                */
  221.   } LNKBLK;
  222.  
  223.  
  224.  
  225. #ifdef FIRMWARE
  226.  
  227. typedef struct timebl              /* "time block", Zeit/Datums-Stamp :   */
  228.   {
  229.     char             second;       /*   Zeit :    Sekunde   (0..59)       */
  230.     char             minute;       /*             Minute    (0..59)       */
  231.     char             hour;         /*             Stunde    (0..23)       */
  232.     char             day;          /*   Datum :   Tag       (1..31)       */
  233.     char             month;        /*             Monat     (1..12)       */
  234.     char             year;         /*             Jahr      (0..99)       */
  235.   } TIMEBL;
  236.  
  237. #endif
  238.  
  239.  
  240.  
  241. /* ACHTUNG: mbhead muss genauso lang sein wie mb !                        */
  242.  
  243. typedef struct mbhead         /* "message buffer head",                   */
  244.   {                           /* Datenbuffer-Liste, Kopf :                */
  245.     struct mbhead   *nextmh;  /*   naechster Eintrag in Liste             */
  246.     struct mbhead   *prevmh;  /*   vorheriger Eintrag in Liste            */
  247.     LHEAD            mbl;     /*   "message buffer list", Zeiger auf      */
  248.                               /*   ersten Infobuffer dieser Message       */
  249.     char            *mbbp;    /*   "message buffer buffer pointer",       */
  250.                               /*   Zeiger auf aktuelles Zeichen in Buffer */
  251.     unsigned         mbpc;    /*   "message buffer put count",            */
  252.                               /*   Einschreibzaehler, aufwaertszaehlend   */
  253.     unsigned         mbgc;    /*   "message buffer get count",            */
  254.                               /*   Lesezaehler, aufwaertszaehlend         */
  255.     struct lnkblk   *l2link;  /*   Zeiger auf assozierten Linkblock       */
  256.     char             type;    /*   Typ des Buffers (User, Status)         */
  257.                               /*          L2M...                          */
  258.                               /*     oder MB...                           */
  259.                               /*     oder 0 User, 2 Level-2, 4 Level-4    */
  260.     char             l2fflg;  /*   Level 2 Frameflag / PID :              */
  261.                               /*     RX: PID                              */
  262.                               /*     TX: PID / s.o. T2FT1ST/T2FUS         */
  263.     char             l2port;  /*   0 = HDLC, 1 = RS232-Crosslink          */
  264.     char             morflg;  /*   "more follows flag" fuer Pakete, die   */
  265.                               /*   durch zusaetzlichen Netzwerkheader zu  */
  266.                               /*   lang wuerden und in 2 Frames           */
  267.                               /*   aufgetrennt wurden                     */
  268.                               /*     YES = das naechste Frame gehoert zu  */
  269.                               /*           diesem Paket                   */
  270.                               /*     NO  = sonst                          */
  271. #ifdef FIRMWARE
  272.     char             rsvd[10];/*   (damit insgesamt Laenge wie mb)        */
  273.     TIMEBL           btime;   /*   Buffer-Time fuer Zeit/Datum-Stamps     */
  274. #else
  275.     char             rsvd[16];/*   (damit insgesamt Laenge wie mb)        */
  276. #endif
  277.  
  278.   } MBHEAD;
  279.  
  280.  
  281.  
  282. /* ACHTUNG: mb muss genauso lang sein wie mbhead !                        */
  283.  
  284. typedef struct mb             /* "message buffer",                        */
  285.   {                           /* allgemeiner Datenbuffer :                */
  286.     struct mb *nextmb;        /*   naechster Eintrag in Liste             */
  287.     struct mb *prevmb;        /*   vorheriger Eintrag in Liste            */
  288.     char       data[32];      /*   Daten                                  */
  289.   } MB;
  290.  
  291.  
  292.  
  293. typedef struct stentry        /* "state table entry",                     */
  294.   {                           /* ein Eintrag in der State-Table :         */
  295.     VOID       (* func)();    /*   Zustandsuebergangsfunktion             */
  296.     char       newstate;      /*   neuer Zustand                          */
  297.   } STENTRY;
  298.  
  299.  
  300.  
  301. #ifdef FIRMWARE
  302.  
  303. typedef struct heardb              /* "heard buffer", ein Eintrag         */
  304.   {                                /* in der Heardliste :                 */
  305.     struct heardb   *nexthb;       /*   Zeiger auf naechsten L.-Eintrag   */
  306.     struct heardb   *prevhb;       /*   Zeiger auf vorherigen L.-Eintrag  */
  307.     char             hid[L2IDLEN]; /*   ID der gehoerten Station          */
  308.     TIMEBL           hfirst;       /*   zuerst gehoert                    */
  309.     TIMEBL           hlast;        /*   zuletzt gehoert                   */
  310.     unsigned         hIno;         /*   Anzahl gehoerte I-Frames          */
  311.     unsigned         hRRno;        /*   Anzahl gehoerte RR-Frames         */
  312.     unsigned         hREJno;       /*   Anzahl gehoerte REJ-Frames        */
  313.     unsigned         hRNRno;       /*   Anzahl gehoerte RNR-Frames        */
  314.     char             hrsvd[5];     /*   (reserviert)                      */
  315.   } HEARDB;
  316.  
  317. #endif
  318.  
  319.  
  320.  
  321. /* Ende von L2.H */
  322.