diff options
author | amurai <amurai@FreeBSD.org> | 1995-01-31 06:29:58 +0000 |
---|---|---|
committer | amurai <amurai@FreeBSD.org> | 1995-01-31 06:29:58 +0000 |
commit | 21ef2761fd1e5a4beb483da8bddf767d36540dce (patch) | |
tree | 3aecd1251d1647032ad1455f304eaeeaab4987d0 /usr.sbin/ppp/fsm.h | |
parent | 0487956fcf018d602bfe99b0e3398c6f4d55680a (diff) | |
download | FreeBSD-src-21ef2761fd1e5a4beb483da8bddf767d36540dce.zip FreeBSD-src-21ef2761fd1e5a4beb483da8bddf767d36540dce.tar.gz |
Diffstat (limited to 'usr.sbin/ppp/fsm.h')
-rw-r--r-- | usr.sbin/ppp/fsm.h | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/usr.sbin/ppp/fsm.h b/usr.sbin/ppp/fsm.h new file mode 100644 index 0000000..0a30ff1 --- /dev/null +++ b/usr.sbin/ppp/fsm.h @@ -0,0 +1,134 @@ +/* + * Written by Toshiharu OHNO (tony-o@iij.ad.jp) + * + * Copyright (C) 1993, Internet Initiative Japan, Inc. All rights reserverd. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by the Internet Initiative Japan. The name of the + * IIJ may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * + * $Id:$ + * + * TODO: + */ +#ifndef _FSM_H_ +#define _FSM_H_ + +#include "defs.h" +#include <netinet/in.h> +#include "timeout.h" + +/* + * State of machine + */ +#define ST_INITIAL 0 +#define ST_STARTING 1 +#define ST_CLOSED 2 +#define ST_STOPPED 3 +#define ST_CLOSING 4 +#define ST_STOPPING 5 +#define ST_REQSENT 6 +#define ST_ACKRCVD 7 +#define ST_ACKSENT 8 +#define ST_OPENED 9 + +#define ST_MAX 10 +#define ST_UNDEF -1 + +#define MODE_REQ 0 +#define MODE_NAK 1 +#define MODE_REJ 2 + +#define OPEN_ACTIVE 0 +#define OPEN_PASSIVE 1 + +struct fsm { + char *name; /* Name of protocol */ + u_short proto; /* Protocol number */ + u_short max_code; + int open_mode; + int state; /* State of the machine */ + int reqid; /* Next request id */ + int restart; /* Restart counter value */ + int maxconfig; + + int reqcode; /* Request code sent */ + struct pppTimer FsmTimer; /* Restart Timer */ + + void (*LayerUp)(); + void (*LayerDown)(); + void (*LayerStart)(); + void (*LayerFinish)(); + void (*InitRestartCounter)(); + void (*SendConfigReq)(); + void (*SendTerminateReq)(); + void (*SendTerminateAck)(); + void (*DecodeConfig)(); +}; + +struct fsmheader { + u_char code; /* Request code */ + u_char id; /* Identification */ + u_short length; /* Length of packet */ +}; + +#define CODE_CONFIGREQ 1 +#define CODE_CONFIGACK 2 +#define CODE_CONFIGNAK 3 +#define CODE_CONFIGREJ 4 +#define CODE_TERMREQ 5 +#define CODE_TERMACK 6 +#define CODE_CODEREJ 7 +#define CODE_PROTOREJ 8 +#define CODE_ECHOREQ 9 /* Used in LCP */ +#define CODE_ECHOREP 10 /* Used in LCP */ +#define CODE_DISCREQ 11 +#define CODE_IDENT 12 /* Used in LCP Extension */ +#define CODE_TIMEREM 13 /* Used in LCP Extension */ +#define CODE_RESETREQ 14 /* Used in CCP */ +#define CODE_RESETACK 15 /* Used in CCP */ + +struct fsmcodedesc { + void (*action)(); + char *name; +}; + +struct fsmconfig { + u_char type; + u_char length; +}; + +u_char AckBuff[200]; +u_char NakBuff[200]; +u_char RejBuff[100]; +u_char ReqBuff[200]; + +u_char *ackp, *nakp, *rejp; + +extern char *StateNames[]; +extern void FsmInit(struct fsm *); +extern void NewState(struct fsm *, int); +extern void FsmOutput(struct fsm *, u_int, u_int, u_char *, int); +extern void FsmOpen(struct fsm *); +extern void FsmUp(struct fsm *); +extern void FsmDown(struct fsm *); +extern void FsmInput(struct fsm *, struct mbuf *); + +extern void FsmRecvConfigReq(struct fsm *, struct fsmheader *, struct mbuf *); +extern void FsmRecvConfigAck(struct fsm *, struct fsmheader *, struct mbuf *); +extern void FsmRecvConfigNak(struct fsm *, struct fsmheader *, struct mbuf *); +extern void FsmRecvTermReq(struct fsm *, struct fsmheader *, struct mbuf *); +extern void FsmRecvTermAck(struct fsm *, struct fsmheader *, struct mbuf *); +extern void FsmClose(struct fsm *fp); + +extern struct fsm LcpFsm, IpcpFsm, CcpFsm; + +#endif /* _FSM_H_ */ |