summaryrefslogtreecommitdiff
path: root/accel-pptpd/ppp
diff options
context:
space:
mode:
authorKozlov Dmitry <dima@server>2010-09-04 16:20:11 +0400
committerKozlov Dmitry <dima@server>2010-09-04 16:20:11 +0400
commitaf5a96e2d04056b065a36ecbd140a16d0685c7e6 (patch)
treef873b3c5c68a72d2df1785fdd0931bc57c91fd35 /accel-pptpd/ppp
parente8aa3a1457295f70f8ccc9cd7f2f9073f01a5e2e (diff)
downloadaccel-ppp-xebd-af5a96e2d04056b065a36ecbd140a16d0685c7e6.tar.gz
accel-ppp-xebd-af5a96e2d04056b065a36ecbd140a16d0685c7e6.zip
started work on radius module
Diffstat (limited to 'accel-pptpd/ppp')
-rw-r--r--accel-pptpd/ppp/ppp.c5
-rw-r--r--accel-pptpd/ppp/ppp.h30
-rw-r--r--accel-pptpd/ppp/ppp_notify.c34
-rw-r--r--accel-pptpd/ppp/ppp_pd.c12
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, &notified_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, &notified_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, &notified_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;
+
+
+}