source: rtems/cpukit/pppd/fsm.h @ a81a8f8

4.104.114.84.95
Last change on this file since a81a8f8 was 0286b9f, checked in by Joel Sherrill <joel.sherrill@…>, on 01/31/02 at 21:42:11

2001-01-31 Mike Siers <mikes@…>

  • Nice Update of PPPD support which eliminates the requiremetn that drivers be in the termios TASK_DRIVEN mode. Mike did significant testing and reports that it seems to be more stable and handle larger packets better. This patch replaces the termios tasks with more general pppd network driver tasks. The functions pppinput() and pppstart() get called from the interrupt service routine.
  • Makefile.am, configure.ac, net/Makefile.am, net/bpf.h, net/ethernet.h, net/if.c, net/if.h, net/if_arp.h, net/if_dl.h, net/if_ethersubr.c, net/if_llc.h, net/if_loop.c, net/if_ppp.h, net/if_pppvar.h, net/if_types.h, net/netisr.h, net/ppp-comp.h, net/ppp_defs.h, net/pppcompress.h, net/radix.c, net/radix.h, net/raw_cb.c, net/raw_cb.h, net/raw_usrreq.c, net/route.c, net/route.h, net/rtsock.c, pppd/Makefile.am, pppd/README, pppd/STATUS, pppd/auth.c, pppd/cbcp.c, pppd/ccp.c, pppd/ccp.h, pppd/chap.c, pppd/chap.h, pppd/chap_ms.c, pppd/chap_ms.h, pppd/chat.c, pppd/demand.c, pppd/fsm.c, pppd/fsm.h, pppd/ipcp.c, pppd/ipcp.h, pppd/ipxcp.c, pppd/ipxcp.h, pppd/lcp.c, pppd/lcp.h, pppd/magic.c, pppd/magic.h, pppd/options.c, pppd/patchlevel.h, pppd/pathnames.h, pppd/pppd.8, pppd/pppd.h, pppd/rtemsmain.c, pppd/rtemspppd.c, pppd/rtemspppd.h, pppd/sys-rtems.c, pppd/upap.c, pppd/upap.h, pppd/utils.c, pppd/example/README, pppd/example/netconfig.h, wrapup/Makefile.am: Modified.
  • net/bsd-comp.c, net/if_ppp.c, net/ppp-deflate.c, net/ppp.h, net/ppp_tty.c, net/pppcompress.c, net/zlib.c, net/zlib.h: New file.
  • modem/, modem/.cvsignore, modem/Makefile.am, modem/ppp.c, modem/ppp.h, modem/ppp_tty.c, modem/pppcompress.c: Subdirectory removed.
  • Property mode set to 100644
File size: 4.9 KB
Line 
1/*
2 * fsm.h - {Link, IP} Control Protocol Finite State Machine definitions.
3 *
4 * Copyright (c) 1989 Carnegie Mellon University.
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms are permitted
8 * provided that the above copyright notice and this paragraph are
9 * duplicated in all such forms and that any documentation,
10 * advertising materials, and other materials related to such
11 * distribution and use acknowledge that the software was developed
12 * by Carnegie Mellon University.  The name of the
13 * University may not be used to endorse or promote products derived
14 * from this software without specific prior written permission.
15 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
16 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
17 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
18 *
19 * $Id$
20 */
21
22/*
23 * Packet header = Code, id, length.
24 */
25#define HEADERLEN       4
26
27
28/*
29 *  CP (LCP, IPCP, etc.) codes.
30 */
31#define CONFREQ         1       /* Configuration Request */
32#define CONFACK         2       /* Configuration Ack */
33#define CONFNAK         3       /* Configuration Nak */
34#define CONFREJ         4       /* Configuration Reject */
35#define TERMREQ         5       /* Termination Request */
36#define TERMACK         6       /* Termination Ack */
37#define CODEREJ         7       /* Code Reject */
38
39
40/*
41 * Each FSM is described by an fsm structure and fsm callbacks.
42 */
43typedef struct fsm {
44    int unit;                   /* Interface unit number */
45    int protocol;               /* Data Link Layer Protocol field value */
46    int state;                  /* State */
47    int flags;                  /* Contains option bits */
48    u_char id;                  /* Current id */
49    u_char reqid;               /* Current request id */
50    u_char seen_ack;            /* Have received valid Ack/Nak/Rej to Req */
51    int timeouttime;            /* Timeout time in milliseconds */
52    int maxconfreqtransmits;    /* Maximum Configure-Request transmissions */
53    int retransmits;            /* Number of retransmissions left */
54    int maxtermtransmits;       /* Maximum Terminate-Request transmissions */
55    int nakloops;               /* Number of nak loops since last ack */
56    int maxnakloops;            /* Maximum number of nak loops tolerated */
57    struct fsm_callbacks *callbacks;    /* Callback routines */
58    char *term_reason;          /* Reason for closing protocol */
59    int term_reason_len;        /* Length of term_reason */
60} fsm;
61
62
63typedef struct fsm_callbacks {
64    void (*resetci)             /* Reset our Configuration Information */
65                __P((fsm *));
66    int  (*cilen)               /* Length of our Configuration Information */
67                __P((fsm *));
68    void (*addci)               /* Add our Configuration Information */
69                __P((fsm *, u_char *, int *));
70    int  (*ackci)               /* ACK our Configuration Information */
71                __P((fsm *, u_char *, int));
72    int  (*nakci)               /* NAK our Configuration Information */
73                __P((fsm *, u_char *, int));
74    int  (*rejci)               /* Reject our Configuration Information */
75                __P((fsm *, u_char *, int));
76    int  (*reqci)               /* Request peer's Configuration Information */
77                __P((fsm *, u_char *, int *, int));
78    void (*up)                  /* Called when fsm reaches OPENED state */
79                __P((fsm *));
80    void (*down)                /* Called when fsm leaves OPENED state */
81                __P((fsm *));
82    void (*starting)            /* Called when we want the lower layer */
83                __P((fsm *));
84    void (*finished)            /* Called when we don't want the lower layer */
85                __P((fsm *));
86    void (*protreject)          /* Called when Protocol-Reject received */
87                __P((int));
88    void (*retransmit)          /* Retransmission is necessary */
89                __P((fsm *));
90    int  (*extcode)             /* Called when unknown code received */
91                __P((fsm *, int, int, u_char *, int));
92    char *proto_name;           /* String name for protocol (for messages) */
93} fsm_callbacks;
94
95
96/*
97 * Link states.
98 */
99#define INITIAL         0       /* Down, hasn't been opened */
100#define STARTING        1       /* Down, been opened */
101#define CLOSED          2       /* Up, hasn't been opened */
102#define STOPPED         3       /* Open, waiting for down event */
103#define CLOSING         4       /* Terminating the connection, not open */
104#define STOPPING        5       /* Terminating, but open */
105#define REQSENT         6       /* We've sent a Config Request */
106#define ACKRCVD         7       /* We've received a Config Ack */
107#define ACKSENT         8       /* We've sent a Config Ack */
108#define OPENED          9       /* Connection available */
109
110
111/*
112 * Flags - indicate options controlling FSM operation
113 */
114#define OPT_PASSIVE     1       /* Don't die if we don't get a response */
115#define OPT_RESTART     2       /* Treat 2nd OPEN as DOWN, UP */
116#define OPT_SILENT      4       /* Wait for peer to speak first */
117
118
119/*
120 * Timeouts.
121 */
122#define DEFTIMEOUT      5       /* Timeout time in seconds */
123#define DEFMAXTERMREQS  2       /* Maximum Terminate-Request transmissions */
124#define DEFMAXCONFREQS  10      /* Maximum Configure-Request transmissions */
125#define DEFMAXNAKLOOPS  5       /* Maximum number of nak loops */
126
127
128/*
129 * Prototypes
130 */
131void fsm_init __P((fsm *));
132void fsm_lowerup __P((fsm *));
133void fsm_lowerdown __P((fsm *));
134void fsm_open __P((fsm *));
135void fsm_close __P((fsm *, char *));
136void fsm_input __P((fsm *, u_char *, int));
137void fsm_protreject __P((fsm *));
138void fsm_sdata __P((fsm *, int, int, u_char *, int));
139
140
141/*
142 * Variables
143 */
144extern int peer_mru[];          /* currently negotiated peer MRU (per unit) */
Note: See TracBrowser for help on using the repository browser.