#include "netif/ppp/ppp_opts.h"
#if PPP_SUPPORT
#ifndef FSM_H
#define FSM_H
#include "ppp.h"
#ifdef __cplusplus
extern "C" {
#endif
#define HEADERLEN 4
#define CONFREQ 1
#define CONFACK 2
#define CONFNAK 3
#define CONFREJ 4
#define TERMREQ 5
#define TERMACK 6
#define CODEREJ 7
typedef struct fsm {
ppp_pcb *pcb;
const struct fsm_callbacks *callbacks;
const char *term_reason;
u8_t seen_ack;
u16_t protocol;
u8_t state;
u8_t flags;
u8_t id;
u8_t reqid;
u8_t retransmits;
u8_t nakloops;
u8_t rnakloops;
u8_t maxnakloops;
u8_t term_reason_len;
} fsm;
typedef struct fsm_callbacks {
void (*resetci)
(fsm *);
int (*cilen)
(fsm *);
void (*addci)
(fsm *, u_char *, int *);
int (*ackci)
(fsm *, u_char *, int);
int (*nakci)
(fsm *, u_char *, int, int);
int (*rejci)
(fsm *, u_char *, int);
int (*reqci)
(fsm *, u_char *, int *, int);
void (*up)
(fsm *);
void (*down)
(fsm *);
void (*starting)
(fsm *);
void (*finished)
(fsm *);
void (*protreject)
(int);
void (*retransmit)
(fsm *);
int (*extcode)
(fsm *, int, int, u_char *, int);
const char *proto_name;
} fsm_callbacks;
#define PPP_FSM_INITIAL 0
#define PPP_FSM_STARTING 1
#define PPP_FSM_CLOSED 2
#define PPP_FSM_STOPPED 3
#define PPP_FSM_CLOSING 4
#define PPP_FSM_STOPPING 5
#define PPP_FSM_REQSENT 6
#define PPP_FSM_ACKRCVD 7
#define PPP_FSM_ACKSENT 8
#define PPP_FSM_OPENED 9
#define OPT_PASSIVE 1
#define OPT_RESTART 2
#define OPT_SILENT 4
#if 0
#define DEFTIMEOUT 3
#define DEFMAXTERMREQS 2
#define DEFMAXCONFREQS 10
#define DEFMAXNAKLOOPS 5
#endif
void fsm_init(fsm *f);
void fsm_lowerup(fsm *f);
void fsm_lowerdown(fsm *f);
void fsm_open(fsm *f);
void fsm_close(fsm *f, const char *reason);
void fsm_input(fsm *f, u_char *inpacket, int l);
void fsm_protreject(fsm *f);
void fsm_sdata(fsm *f, u_char code, u_char id, const u_char *data, int datalen);
#ifdef __cplusplus
}
#endif
#endif
#endif