summaryrefslogtreecommitdiff
path: root/accel-pppd/ppp/ppp.c
diff options
context:
space:
mode:
authorKozlov Dmitry <xeb@mail.ru>2011-08-26 23:49:37 +0400
committerKozlov Dmitry <xeb@mail.ru>2011-08-26 23:49:37 +0400
commit00120e890feef1afc05ac492dfdba91eaf33737d (patch)
treef457e35eaa65cd6d0e34a4ca43a3f47f4258457d /accel-pppd/ppp/ppp.c
parent946bc48f3c060161353aceb96166820be80dd846 (diff)
downloadaccel-ppp-xebd-00120e890feef1afc05ac492dfdba91eaf33737d.tar.gz
accel-ppp-xebd-00120e890feef1afc05ac492dfdba91eaf33737d.zip
ppp: fix optional layers startup issue
Diffstat (limited to 'accel-pppd/ppp/ppp.c')
-rw-r--r--accel-pppd/ppp/ppp.c27
1 files changed, 21 insertions, 6 deletions
diff --git a/accel-pppd/ppp/ppp.c b/accel-pppd/ppp/ppp.c
index 3b65dfe..a0f65f1 100644
--- a/accel-pppd/ppp/ppp.c
+++ b/accel-pppd/ppp/ppp.c
@@ -433,16 +433,11 @@ static void ppp_ifup(struct ppp_t *ppp)
triton_event_fire(EV_PPP_STARTED, ppp);
}
-void __export ppp_layer_started(struct ppp_t *ppp, struct ppp_layer_data_t *d)
+static void __ppp_layer_started(struct ppp_t *ppp, struct ppp_layer_data_t *d)
{
struct layer_node_t *n = d->node;
int f = 0;
- if (d->started)
- return;
-
- d->started = 1;
-
list_for_each_entry(d, &n->items, entry) {
if (!d->started && !d->passive) return;
if (d->started && !d->optional)
@@ -470,6 +465,26 @@ void __export ppp_layer_started(struct ppp_t *ppp, struct ppp_layer_data_t *d)
}
}
+void __export ppp_layer_started(struct ppp_t *ppp, struct ppp_layer_data_t *d)
+{
+ if (d->started)
+ return;
+
+ d->started = 1;
+
+ __ppp_layer_started(ppp, d);
+}
+
+void __export ppp_layer_passive(struct ppp_t *ppp, struct ppp_layer_data_t *d)
+{
+ if (d->started)
+ return;
+
+ d->passive = 1;
+
+ __ppp_layer_started(ppp, d);
+}
+
void __export ppp_layer_finished(struct ppp_t *ppp, struct ppp_layer_data_t *d)
{
struct layer_node_t *n = d->node;