diff options
author | Kozlov Dmitry <xeb@mail.ru> | 2010-10-23 15:16:04 +0400 |
---|---|---|
committer | Kozlov Dmitry <xeb@mail.ru> | 2010-10-23 15:16:04 +0400 |
commit | a970c053a5c74d39ec5f6c14fb36b4f092eaf1b5 (patch) | |
tree | 3663cafa808021001f7b59cda458b84f5abc2ef3 /accel-pptpd/ppp/ppp_ipcp.c | |
parent | ce95b416f4b6c5012073bb14c0b48c6b3a81fc33 (diff) | |
download | accel-ppp-a970c053a5c74d39ec5f6c14fb36b4f092eaf1b5.tar.gz accel-ppp-a970c053a5c74d39ec5f6c14fb36b4f092eaf1b5.zip |
pppd_compat: ip-pre-up call moved to proper place
ppp: don't negotiate mru after ConfNak received
Diffstat (limited to 'accel-pptpd/ppp/ppp_ipcp.c')
-rw-r--r-- | accel-pptpd/ppp/ppp_ipcp.c | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/accel-pptpd/ppp/ppp_ipcp.c b/accel-pptpd/ppp/ppp_ipcp.c index 616714ce..3248db6c 100644 --- a/accel-pptpd/ppp/ppp_ipcp.c +++ b/accel-pptpd/ppp/ppp_ipcp.c @@ -335,17 +335,32 @@ static int ipcp_recv_conf_req(struct ppp_ipcp_t *ipcp, uint8_t *data, int size) list_for_each_entry(lopt, &ipcp->options, entry) lopt->state=IPCP_OPT_NONE; - if (conf_ppp_verbose) + if (conf_ppp_verbose) { log_ppp_info("recv [IPCP ConfReq id=%x", ipcp->fsm.recv_id); - list_for_each_entry(ropt, &ipcp->ropt_list, entry) { - list_for_each_entry(lopt, &ipcp->options, entry) { - if (lopt->id == ropt->hdr->id) { - if (conf_ppp_verbose) { + list_for_each_entry(ropt, &ipcp->ropt_list, entry) { + list_for_each_entry(lopt, &ipcp->options, entry) { + if (lopt->id == ropt->hdr->id) { + ropt->lopt = lopt; log_ppp_info(" "); lopt->h->print(log_ppp_info, lopt, (uint8_t*)ropt->hdr); + break; } + } + if (!ropt->lopt) { + log_ppp_info(" "); + print_ropt(ropt); + } + } + log_ppp_info("]\n"); + } + + list_for_each_entry(ropt, &ipcp->ropt_list, entry) { + list_for_each_entry(lopt, &ipcp->options, entry) { + if (lopt->id == ropt->hdr->id) { r = lopt->h->recv_conf_req(ipcp, lopt, (uint8_t*)ropt->hdr); + if (ipcp->ppp->stop_time) + return -1; lopt->state = r; ropt->state = r; ropt->lopt = lopt; @@ -354,19 +369,12 @@ static int ipcp_recv_conf_req(struct ppp_ipcp_t *ipcp, uint8_t *data, int size) break; } } - if (!ropt->lopt) - { - if (conf_ppp_verbose) { - log_ppp_info(" "); - print_ropt(ropt); - } + if (!ropt->lopt) { ropt->state = IPCP_OPT_REJ; ret = IPCP_OPT_REJ; } } - if (conf_ppp_verbose) - log_ppp_info("]\n"); /*list_for_each_entry(lopt,&ipcp->options,entry) { @@ -571,6 +579,8 @@ static void ipcp_recv(struct ppp_handler_t*h) switch(hdr->code) { case CONFREQ: r = ipcp_recv_conf_req(ipcp,(uint8_t*)(hdr + 1), ntohs(hdr->len) - PPP_HDRLEN); + if (ipcp->ppp->stop_time) + return; switch(r) { case IPCP_OPT_ACK: ppp_fsm_recv_conf_req_ack(&ipcp->fsm); |