diff options
Diffstat (limited to 'accel-pptpd/ppp')
-rw-r--r-- | accel-pptpd/ppp/ppp.c | 5 | ||||
-rw-r--r-- | accel-pptpd/ppp/ppp.h | 30 | ||||
-rw-r--r-- | accel-pptpd/ppp/ppp_notify.c | 34 | ||||
-rw-r--r-- | accel-pptpd/ppp/ppp_pd.c | 12 |
4 files changed, 71 insertions, 10 deletions
diff --git a/accel-pptpd/ppp/ppp.c b/accel-pptpd/ppp/ppp.c index 5c2eb91..4ad8221 100644 --- a/accel-pptpd/ppp/ppp.c +++ b/accel-pptpd/ppp/ppp.c @@ -18,6 +18,7 @@ #include "log.h" static LIST_HEAD(layers); +int sock_fd; struct layer_node_t { @@ -94,6 +95,7 @@ int __export establish_ppp(struct ppp_t *ppp) INIT_LIST_HEAD(&ppp->chan_handlers); INIT_LIST_HEAD(&ppp->unit_handlers); + INIT_LIST_HEAD(&ppp->pd_list); init_layers(ppp); @@ -127,6 +129,7 @@ int __export establish_ppp(struct ppp_t *ppp) log_debug("ppp established\n"); + ppp_notify_started(ppp); start_first_layer(ppp); return 0; @@ -159,6 +162,7 @@ static void destablish_ppp(struct ppp_t *ppp) log_debug("ppp destablished\n"); + ppp_notify_finished(ppp); ppp->ctrl->finished(ppp); } @@ -481,7 +485,6 @@ struct ppp_layer_data_t *ppp_find_layer_data(struct ppp_t *ppp, struct ppp_layer return NULL; } -int sock_fd; static void __init ppp_init(void) { sock_fd = socket(AF_INET, SOCK_DGRAM, 0); diff --git a/accel-pptpd/ppp/ppp.h b/accel-pptpd/ppp/ppp.h index d880fc2..da2fb97 100644 --- a/accel-pptpd/ppp/ppp.h +++ b/accel-pptpd/ppp/ppp.h @@ -12,13 +12,6 @@ #define PPP_HEADERLEN 4 #define PPP_MTU 1500 -/* - * Timeouts. - */ -#define DEFTIMEOUT 3 /* Timeout time in seconds */ -#define DEFMAXTERMREQS 2 /* Maximum Terminate-Request transmissions */ -#define DEFMAXCONFREQS 10 /* Maximum Configure-Request transmissions */ -#define DEFMAXNAKLOOPS 5 /* Maximum number of nak loops */ /* * Protocol field values. @@ -48,8 +41,6 @@ #define PPP_LAYER_CCP 3 #define PPP_LAYER_IPCP 4 -#define AUTH_MAX 3 - struct ppp_t; struct ppp_ctrl_t @@ -59,6 +50,20 @@ struct ppp_ctrl_t void (*finished)(struct ppp_t*); }; +struct ppp_notified_t +{ + struct list_head entry; + void (*started)(struct ppp_notified_t *, struct ppp_t *); + void (*finished)(struct ppp_notified_t *, struct ppp_t *); + void (*authenticated)(struct ppp_notified_t *, struct ppp_t *); +}; + +struct ppp_pd_t +{ + struct list_head entry; + void *key; +}; + struct ppp_t { struct triton_md_handler_t chan_hnd; @@ -87,6 +92,8 @@ struct ppp_t struct list_head layers; struct ppp_lcp_t *lcp; + + struct list_head pd_list; }; struct ppp_layer_t; @@ -134,5 +141,10 @@ int ppp_register_layer(const char *name, struct ppp_layer_t *); void ppp_unregister_layer(struct ppp_layer_t *); struct ppp_layer_data_t *ppp_find_layer_data(struct ppp_t *, struct ppp_layer_t *); +void ppp_register_notified(struct ppp_notified_t *); +void ppp_unregister_notified(struct ppp_notified_t *); +void ppp_notify_started(struct ppp_t *ppp); +void ppp_notify_finished(struct ppp_t *ppp); + extern int sock_fd; // internet socket for ioctls #endif diff --git a/accel-pptpd/ppp/ppp_notify.c b/accel-pptpd/ppp/ppp_notify.c new file mode 100644 index 0000000..94ceb6d --- /dev/null +++ b/accel-pptpd/ppp/ppp_notify.c @@ -0,0 +1,34 @@ +#include "ppp.h" + +static LIST_HEAD(notified_list); + +void __export ppp_register_notified(struct ppp_notified_t *n) +{ + list_add_tail(&n->entry, ¬ified_list); +} + +void __export ppp_unregister_notified(struct ppp_notified_t *n) +{ + list_del(&n->entry); +} + +void ppp_notify_started(struct ppp_t *ppp) +{ + struct ppp_notified_t *n; + + list_for_each_entry(n, ¬ified_list, entry) { + if (n->started) + n->started(n, ppp); + } +} + +void ppp_notify_finished(struct ppp_t *ppp) +{ + struct ppp_notified_t *n; + + list_for_each_entry(n, ¬ified_list, entry) { + if (n->finished) + n->finished(n, ppp); + } +} + diff --git a/accel-pptpd/ppp/ppp_pd.c b/accel-pptpd/ppp/ppp_pd.c new file mode 100644 index 0000000..fe51bc0 --- /dev/null +++ b/accel-pptpd/ppp/ppp_pd.c @@ -0,0 +1,12 @@ +#include "ppp.h" + +int ppp_store_pd(struct ppp_t *ppp, pd_key_t key, void *data) +{ + struct ppp_pd_t *pd; + + list_for_each_entry(pd, &ppp->pd_list, entry) + if (pd->key == key) + return -1; + + +} |