home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / SLAX 6.0.8 / slax-6.0.8.iso / slax / base / 006-devel.lzm / usr / include / pppd / fsm.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-06-29  |  6.0 KB  |  169 lines

  1. /*
  2.  * fsm.h - {Link, IP} Control Protocol Finite State Machine definitions.
  3.  *
  4.  * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  *
  10.  * 1. Redistributions of source code must retain the above copyright
  11.  *    notice, this list of conditions and the following disclaimer.
  12.  *
  13.  * 2. Redistributions in binary form must reproduce the above copyright
  14.  *    notice, this list of conditions and the following disclaimer in
  15.  *    the documentation and/or other materials provided with the
  16.  *    distribution.
  17.  *
  18.  * 3. The name "Carnegie Mellon University" must not be used to
  19.  *    endorse or promote products derived from this software without
  20.  *    prior written permission. For permission or any legal
  21.  *    details, please contact
  22.  *      Office of Technology Transfer
  23.  *      Carnegie Mellon University
  24.  *      5000 Forbes Avenue
  25.  *      Pittsburgh, PA  15213-3890
  26.  *      (412) 268-4387, fax: (412) 268-7395
  27.  *      tech-transfer@andrew.cmu.edu
  28.  *
  29.  * 4. Redistributions of any form whatsoever must retain the following
  30.  *    acknowledgment:
  31.  *    "This product includes software developed by Computing Services
  32.  *     at Carnegie Mellon University (http://www.cmu.edu/computing/)."
  33.  *
  34.  * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO
  35.  * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
  36.  * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE
  37.  * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  38.  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
  39.  * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
  40.  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  41.  *
  42.  * $Id: fsm.h,v 1.10 2004/11/13 02:28:15 paulus Exp $
  43.  */
  44.  
  45. /*
  46.  * Packet header = Code, id, length.
  47.  */
  48. #define HEADERLEN    4
  49.  
  50.  
  51. /*
  52.  *  CP (LCP, IPCP, etc.) codes.
  53.  */
  54. #define CONFREQ        1    /* Configuration Request */
  55. #define CONFACK        2    /* Configuration Ack */
  56. #define CONFNAK        3    /* Configuration Nak */
  57. #define CONFREJ        4    /* Configuration Reject */
  58. #define TERMREQ        5    /* Termination Request */
  59. #define TERMACK        6    /* Termination Ack */
  60. #define CODEREJ        7    /* Code Reject */
  61.  
  62.  
  63. /*
  64.  * Each FSM is described by an fsm structure and fsm callbacks.
  65.  */
  66. typedef struct fsm {
  67.     int unit;            /* Interface unit number */
  68.     int protocol;        /* Data Link Layer Protocol field value */
  69.     int state;            /* State */
  70.     int flags;            /* Contains option bits */
  71.     u_char id;            /* Current id */
  72.     u_char reqid;        /* Current request id */
  73.     u_char seen_ack;        /* Have received valid Ack/Nak/Rej to Req */
  74.     int timeouttime;        /* Timeout time in milliseconds */
  75.     int maxconfreqtransmits;    /* Maximum Configure-Request transmissions */
  76.     int retransmits;        /* Number of retransmissions left */
  77.     int maxtermtransmits;    /* Maximum Terminate-Request transmissions */
  78.     int nakloops;        /* Number of nak loops since last ack */
  79.     int rnakloops;        /* Number of naks received */
  80.     int maxnakloops;        /* Maximum number of nak loops tolerated */
  81.     struct fsm_callbacks *callbacks;    /* Callback routines */
  82.     char *term_reason;        /* Reason for closing protocol */
  83.     int term_reason_len;    /* Length of term_reason */
  84. } fsm;
  85.  
  86.  
  87. typedef struct fsm_callbacks {
  88.     void (*resetci)        /* Reset our Configuration Information */
  89.         __P((fsm *));
  90.     int  (*cilen)        /* Length of our Configuration Information */
  91.         __P((fsm *));
  92.     void (*addci)         /* Add our Configuration Information */
  93.         __P((fsm *, u_char *, int *));
  94.     int  (*ackci)        /* ACK our Configuration Information */
  95.         __P((fsm *, u_char *, int));
  96.     int  (*nakci)        /* NAK our Configuration Information */
  97.         __P((fsm *, u_char *, int, int));
  98.     int  (*rejci)        /* Reject our Configuration Information */
  99.         __P((fsm *, u_char *, int));
  100.     int  (*reqci)        /* Request peer's Configuration Information */
  101.         __P((fsm *, u_char *, int *, int));
  102.     void (*up)            /* Called when fsm reaches OPENED state */
  103.         __P((fsm *));
  104.     void (*down)        /* Called when fsm leaves OPENED state */
  105.         __P((fsm *));
  106.     void (*starting)        /* Called when we want the lower layer */
  107.         __P((fsm *));
  108.     void (*finished)        /* Called when we don't want the lower layer */
  109.         __P((fsm *));
  110.     void (*protreject)        /* Called when Protocol-Reject received */
  111.         __P((int));
  112.     void (*retransmit)        /* Retransmission is necessary */
  113.         __P((fsm *));
  114.     int  (*extcode)        /* Called when unknown code received */
  115.         __P((fsm *, int, int, u_char *, int));
  116.     char *proto_name;        /* String name for protocol (for messages) */
  117. } fsm_callbacks;
  118.  
  119.  
  120. /*
  121.  * Link states.
  122.  */
  123. #define INITIAL        0    /* Down, hasn't been opened */
  124. #define STARTING    1    /* Down, been opened */
  125. #define CLOSED        2    /* Up, hasn't been opened */
  126. #define STOPPED        3    /* Open, waiting for down event */
  127. #define CLOSING        4    /* Terminating the connection, not open */
  128. #define STOPPING    5    /* Terminating, but open */
  129. #define REQSENT        6    /* We've sent a Config Request */
  130. #define ACKRCVD        7    /* We've received a Config Ack */
  131. #define ACKSENT        8    /* We've sent a Config Ack */
  132. #define OPENED        9    /* Connection available */
  133.  
  134.  
  135. /*
  136.  * Flags - indicate options controlling FSM operation
  137.  */
  138. #define OPT_PASSIVE    1    /* Don't die if we don't get a response */
  139. #define OPT_RESTART    2    /* Treat 2nd OPEN as DOWN, UP */
  140. #define OPT_SILENT    4    /* Wait for peer to speak first */
  141.  
  142.  
  143. /*
  144.  * Timeouts.
  145.  */
  146. #define DEFTIMEOUT    3    /* Timeout time in seconds */
  147. #define DEFMAXTERMREQS    2    /* Maximum Terminate-Request transmissions */
  148. #define DEFMAXCONFREQS    10    /* Maximum Configure-Request transmissions */
  149. #define DEFMAXNAKLOOPS    5    /* Maximum number of nak loops */
  150.  
  151.  
  152. /*
  153.  * Prototypes
  154.  */
  155. void fsm_init __P((fsm *));
  156. void fsm_lowerup __P((fsm *));
  157. void fsm_lowerdown __P((fsm *));
  158. void fsm_open __P((fsm *));
  159. void fsm_close __P((fsm *, char *));
  160. void fsm_input __P((fsm *, u_char *, int));
  161. void fsm_protreject __P((fsm *));
  162. void fsm_sdata __P((fsm *, int, int, u_char *, int));
  163.  
  164.  
  165. /*
  166.  * Variables
  167.  */
  168. extern int peer_mru[];        /* currently negotiated peer MRU (per unit) */
  169.