RTEMS
5.1
cpukit
pppd
fsm.h
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
*/
43
typedef
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
63
typedef
struct
fsm_callbacks
{
64
void (*resetci)
/* Reset our Configuration Information */
65
(
fsm
*);
66
int (*cilen)
/* Length of our Configuration Information */
67
(
fsm
*);
68
void (*addci)
/* Add our Configuration Information */
69
(
fsm
*, u_char *,
int
*);
70
int (*ackci)
/* ACK our Configuration Information */
71
(
fsm
*, u_char *, int);
72
int (*nakci)
/* NAK our Configuration Information */
73
(
fsm
*, u_char *, int);
74
int (*rejci)
/* Reject our Configuration Information */
75
(
fsm
*, u_char *, int);
76
int (*reqci)
/* Request peer's Configuration Information */
77
(
fsm
*, u_char *,
int
*, int);
78
void (*up)
/* Called when fsm reaches OPENED state */
79
(
fsm
*);
80
void (*down)
/* Called when fsm leaves OPENED state */
81
(
fsm
*);
82
void (*starting)
/* Called when we want the lower layer */
83
(
fsm
*);
84
void (*finished)
/* Called when we don't want the lower layer */
85
(
fsm
*);
86
void (*protreject)
/* Called when Protocol-Reject received */
87
(int);
88
void (*retransmit)
/* Retransmission is necessary */
89
(
fsm
*);
90
int (*extcode)
/* Called when unknown code received */
91
(
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
*/
131
void
fsm_init(
fsm
*);
132
void
fsm_lowerup(
fsm
*);
133
void
fsm_lowerdown(
fsm
*);
134
void
fsm_open(
fsm
*);
135
void
fsm_close(
fsm
*,
char
*);
136
void
fsm_input(
fsm
*, u_char *,
int
);
137
void
fsm_protreject(
fsm
*);
138
void
fsm_sdata(
fsm
*, u_char, u_char, u_char *,
int
);
139
140
141
/*
142
* Variables
143
*/
144
extern
int
peer_mru[];
/* currently negotiated peer MRU (per unit) */
fsm
Definition:
fsm.h:43
fsm_callbacks
Definition:
fsm.h:63
Generated by
1.8.15