summaryrefslogtreecommitdiff
path: root/accel-pptpd/ppp/ppp_ipcp.c
diff options
context:
space:
mode:
authorKozlov Dmitry <xeb@mail.ru>2010-10-23 15:16:04 +0400
committerKozlov Dmitry <xeb@mail.ru>2010-10-23 15:16:04 +0400
commita970c053a5c74d39ec5f6c14fb36b4f092eaf1b5 (patch)
tree3663cafa808021001f7b59cda458b84f5abc2ef3 /accel-pptpd/ppp/ppp_ipcp.c
parentce95b416f4b6c5012073bb14c0b48c6b3a81fc33 (diff)
downloadaccel-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.c36
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);