summaryrefslogtreecommitdiff
path: root/accel-pptpd/ppp_fsm.h
diff options
context:
space:
mode:
Diffstat (limited to 'accel-pptpd/ppp_fsm.h')
-rw-r--r--accel-pptpd/ppp_fsm.h91
1 files changed, 91 insertions, 0 deletions
diff --git a/accel-pptpd/ppp_fsm.h b/accel-pptpd/ppp_fsm.h
new file mode 100644
index 0000000..f07735d
--- /dev/null
+++ b/accel-pptpd/ppp_fsm.h
@@ -0,0 +1,91 @@
+#ifndef PPP_FSM_H
+#define PPP_FSM_H
+
+#include "list.h"
+
+typedef enum {FSM_Initial=0,FSM_Starting,FSM_Closed,FSM_Stopped,FSM_Closing,FSM_Stopping,FSM_Req_Sent,FSM_Ack_Rcvd,FSM_Ack_Sent,FSM_Opened} FSM_STATE;
+/*
+ * CP (LCP, IPCP, etc.) codes.
+ */
+#define CONFREQ 1 /* Configuration Request */
+#define CONFACK 2 /* Configuration Ack */
+#define CONFNAK 3 /* Configuration Nak */
+#define CONFREJ 4 /* Configuration Reject */
+#define TERMREQ 5 /* Termination Request */
+#define TERMACK 6 /* Termination Ack */
+#define CODEREJ 7 /* Code Reject */
+#define ECHOREQ 9 /* Echo Request */
+#define ECHOREP 10 /* Echo Reply */
+
+struct ppp_hdr_t;
+
+struct lcp_options_t
+{
+ int mru;
+ int auth;
+ int magic;
+ int accomp;
+ int pcomp;
+};
+
+struct ppp_layer_t
+{
+ struct list_head entry;
+ struct ppp_layer_t *lower;
+ struct ppp_layer_t *upper;
+
+ int proto;
+ struct ppp_t *ppp;
+ FSM_STATE fsm_state;
+
+ union
+ {
+ struct lcp_options_t lcp;
+ }options;
+
+ struct triton_timer_t restart_timer;
+ int restart_counter;
+ int max_terminate;
+ int max_configure;
+ int max_failure;
+
+ int seq;
+ int recv_id;
+ int magic_num;
+
+ int opt_restart:1;
+ int opt_passive:1;
+
+ //fsm handling
+ void (*layer_up)(struct ppp_layer_t*);
+ void (*layer_down)(struct ppp_layer_t*);
+ void (*layer_started)(struct ppp_layer_t*);
+ void (*layer_finished)(struct ppp_layer_t*);
+ void (*send_conf_req)(struct ppp_layer_t*);
+ void (*send_conf_ack)(struct ppp_layer_t*);
+ void (*send_conf_nak)(struct ppp_layer_t*);
+ void (*send_conf_rej)(struct ppp_layer_t*);
+
+ void (*recv)(struct ppp_layer_t*,struct ppp_hdr_t*);
+};
+
+void ppp_fsm_init(struct ppp_layer_t*);
+void ppp_fsm_recv(struct ppp_layer_t*);
+
+void ppp_fsm_lower_up(struct ppp_layer_t *layer);
+void ppp_fsm_lower_down(struct ppp_layer_t *layer);
+void ppp_fsm_open(struct ppp_layer_t *layer);
+void ppp_fsm_close(struct ppp_layer_t *layer);
+void ppp_fsm_timeout0(struct ppp_layer_t *layer);
+void ppp_fsm_timeout1(struct ppp_layer_t *layer);
+void ppp_fsm_recv_conf_req_good(struct ppp_layer_t *layer);
+void ppp_fsm_recv_conf_req_bad(struct ppp_layer_t *layer);
+void ppp_fsm_recv_conf_ack(struct ppp_layer_t *layer);
+void ppp_fsm_recv_conf_rej(struct ppp_layer_t *layer);
+void ppp_fsm_recv_term_req(struct ppp_layer_t *layer);
+void ppp_fsm_recv_term_ack(struct ppp_layer_t *layer);
+void ppp_fsm_recv_unk(struct ppp_layer_t *layer);
+void ppp_fsm_recv_code_rej_bad(struct ppp_layer_t *layer);
+void ppp_fsm_recv_echo(struct ppp_layer_t *layer);
+
+#endif