Lines Matching refs:cbcp
63 cbcp_Init(struct cbcp *cbcp, struct physical *p) in cbcp_Init() argument
65 cbcp->required = 0; in cbcp_Init()
66 cbcp->fsm.state = CBCP_CLOSED; in cbcp_Init()
67 cbcp->fsm.id = 0; in cbcp_Init()
68 cbcp->fsm.delay = 0; in cbcp_Init()
69 *cbcp->fsm.phone = '\0'; in cbcp_Init()
70 memset(&cbcp->fsm.timer, '\0', sizeof cbcp->fsm.timer); in cbcp_Init()
71 cbcp->p = p; in cbcp_Init()
74 static void cbcp_SendReq(struct cbcp *);
75 static void cbcp_SendResponse(struct cbcp *);
76 static void cbcp_SendAck(struct cbcp *);
81 struct cbcp *cbcp = (struct cbcp *)v; in cbcp_Timeout() local
83 timer_Stop(&cbcp->fsm.timer); in cbcp_Timeout()
84 if (cbcp->fsm.restart) { in cbcp_Timeout()
85 switch (cbcp->fsm.state) { in cbcp_Timeout()
89 cbcp->p->dl->name); in cbcp_Timeout()
93 cbcp_SendReq(cbcp); in cbcp_Timeout()
96 cbcp_SendResponse(cbcp); in cbcp_Timeout()
99 cbcp_SendAck(cbcp); in cbcp_Timeout()
105 switch (cbcp->fsm.state) { in cbcp_Timeout()
120 cbcp->p->dl->name); in cbcp_Timeout()
126 cbcp->p->dl->name, missed); in cbcp_Timeout()
127 datalink_CBCPFailed(cbcp->p->dl); in cbcp_Timeout()
132 cbcp_StartTimer(struct cbcp *cbcp, int timeout) in cbcp_StartTimer() argument
134 timer_Stop(&cbcp->fsm.timer); in cbcp_StartTimer()
135 cbcp->fsm.timer.func = cbcp_Timeout; in cbcp_StartTimer()
136 cbcp->fsm.timer.name = "cbcp"; in cbcp_StartTimer()
137 cbcp->fsm.timer.load = timeout * SECTICKS; in cbcp_StartTimer()
138 cbcp->fsm.timer.arg = cbcp; in cbcp_StartTimer()
139 timer_Start(&cbcp->fsm.timer); in cbcp_StartTimer()
161 cbcp_NewPhase(struct cbcp *cbcp, int new) in cbcp_NewPhase() argument
163 if (cbcp->fsm.state != new) { in cbcp_NewPhase()
164 log_Printf(LogCBCP, "%s: State change %s --> %s\n", cbcp->p->dl->name, in cbcp_NewPhase()
165 cbcpstate(cbcp->fsm.state), cbcpstate(new)); in cbcp_NewPhase()
166 cbcp->fsm.state = new; in cbcp_NewPhase()
196 cbcp_Output(struct cbcp *cbcp, u_char code, struct cbcp_data *data) in cbcp_Output() argument
204 head->id = cbcp->fsm.id; in cbcp_Output()
208 link_PushPacket(&cbcp->p->link, bp, cbcp->p->dl->bundle, in cbcp_Output()
209 LINK_QUEUES(&cbcp->p->link) - 1, PROTO_CBCP); in cbcp_Output()
256 cbcp_SendReq(struct cbcp *cbcp) in cbcp_SendReq() argument
260 char list[sizeof cbcp->fsm.phone], *next; in cbcp_SendReq()
265 log_Printf(LogCBCP, "%s: SendReq(%d) state = %s\n", cbcp->p->dl->name, in cbcp_SendReq()
266 cbcp->fsm.id, cbcpstate(cbcp->fsm.state)); in cbcp_SendReq()
267 data.type = cbcp->fsm.type; in cbcp_SendReq()
269 strncpy(list, cbcp->fsm.phone, sizeof list - 1); in cbcp_SendReq()
307 cbcp_Output(cbcp, CBCP_REQ, &data); in cbcp_SendReq()
308 cbcp->fsm.restart--; in cbcp_SendReq()
309 cbcp_StartTimer(cbcp, cbcp->fsm.delay); in cbcp_SendReq()
310 cbcp_NewPhase(cbcp, CBCP_REQSENT); /* Wait for a RESPONSE */ in cbcp_SendReq()
314 cbcp_Up(struct cbcp *cbcp) in cbcp_Up() argument
316 struct lcp *lcp = &cbcp->p->link.lcp; in cbcp_Up()
318 cbcp->fsm.delay = cbcp->p->dl->cfg.cbcp.delay; in cbcp_Up()
319 if (*cbcp->p->dl->peer.authname == '\0' || in cbcp_Up()
320 !auth_SetPhoneList(cbcp->p->dl->peer.authname, cbcp->fsm.phone, in cbcp_Up()
321 sizeof cbcp->fsm.phone)) { in cbcp_Up()
322 strncpy(cbcp->fsm.phone, cbcp->p->dl->cfg.cbcp.phone, in cbcp_Up()
323 sizeof cbcp->fsm.phone - 1); in cbcp_Up()
324 cbcp->fsm.phone[sizeof cbcp->fsm.phone - 1] = '\0'; in cbcp_Up()
328 if (*cbcp->fsm.phone == '\0') in cbcp_Up()
329 cbcp->fsm.type = CBCP_NONUM; in cbcp_Up()
330 else if (!strcmp(cbcp->fsm.phone, "*")) { in cbcp_Up()
331 cbcp->fsm.type = CBCP_SERVERNUM; in cbcp_Up()
332 *cbcp->fsm.phone = '\0'; in cbcp_Up()
334 cbcp->fsm.type = CBCP_CLIENTNUM; in cbcp_Up()
335 cbcp_NewPhase(cbcp, CBCP_STOPPED); /* Wait for a REQ */ in cbcp_Up()
336 cbcp_StartTimer(cbcp, cbcp->fsm.delay * DEF_FSMTRIES); in cbcp_Up()
338 if (*cbcp->fsm.phone == '\0') in cbcp_Up()
339 cbcp->fsm.type = CBCP_NONUM; in cbcp_Up()
340 else if (!strcmp(cbcp->fsm.phone, "*")) { in cbcp_Up()
341 cbcp->fsm.type = CBCP_CLIENTNUM; in cbcp_Up()
342 *cbcp->fsm.phone = '\0'; in cbcp_Up()
343 } else if (strchr(cbcp->fsm.phone, ',')) in cbcp_Up()
344 cbcp->fsm.type = CBCP_LISTNUM; in cbcp_Up()
346 cbcp->fsm.type = CBCP_SERVERNUM; in cbcp_Up()
347 cbcp->fsm.restart = DEF_FSMTRIES; in cbcp_Up()
348 cbcp_SendReq(cbcp); in cbcp_Up()
353 cbcp_AdjustResponse(struct cbcp *cbcp, struct cbcp_data *data) in cbcp_AdjustResponse() argument
363 if (cbcp->p->dl->cfg.callback.opmask & CALLBACK_BIT(CALLBACK_NONE)) in cbcp_AdjustResponse()
369 cbcp->fsm.type = CBCP_NONUM; in cbcp_AdjustResponse()
380 if (cbcp->fsm.type == CBCP_CLIENTNUM) { in cbcp_AdjustResponse()
396 ptr = strchr(cbcp->fsm.phone, ','); in cbcp_AdjustResponse()
405 if (cbcp->fsm.type == CBCP_SERVERNUM) { in cbcp_AdjustResponse()
406 *cbcp->fsm.phone = '\0'; in cbcp_AdjustResponse()
421 } else if (cbcp->fsm.type == CBCP_CLIENTNUM) { in cbcp_AdjustResponse()
427 char list[sizeof cbcp->fsm.phone], *next; in cbcp_AdjustResponse()
429 strncpy(list, cbcp->fsm.phone, sizeof list - 1); in cbcp_AdjustResponse()
433 cbcp->fsm.type = CBCP_SERVERNUM; in cbcp_AdjustResponse()
434 strcpy(cbcp->fsm.phone, next); in cbcp_AdjustResponse()
443 if (cbcp->fsm.type == CBCP_CLIENTNUM || cbcp->fsm.type == CBCP_LISTNUM) { in cbcp_AdjustResponse()
448 char list[sizeof cbcp->fsm.phone], *next, *end; in cbcp_AdjustResponse()
455 strncpy(list, cbcp->fsm.phone, sizeof list - 1); in cbcp_AdjustResponse()
459 cbcp->fsm.type = CBCP_LISTNUM; in cbcp_AdjustResponse()
460 strcpy(cbcp->fsm.phone, next); in cbcp_AdjustResponse()
478 cbcp_SendResponse(struct cbcp *cbcp) in cbcp_SendResponse() argument
485 log_Printf(LogCBCP, "%s: SendResponse(%d) state = %s\n", cbcp->p->dl->name, in cbcp_SendResponse()
486 cbcp->fsm.id, cbcpstate(cbcp->fsm.state)); in cbcp_SendResponse()
488 data.type = cbcp->fsm.type; in cbcp_SendResponse()
489 data.delay = cbcp->fsm.delay; in cbcp_SendResponse()
493 else if (*cbcp->fsm.phone) { in cbcp_SendResponse()
495 strncpy(addr->addr, cbcp->fsm.phone, sizeof addr->addr - 1); in cbcp_SendResponse()
502 cbcp_Output(cbcp, CBCP_RESPONSE, &data); in cbcp_SendResponse()
503 cbcp->fsm.restart--; in cbcp_SendResponse()
504 cbcp_StartTimer(cbcp, cbcp->fsm.delay); in cbcp_SendResponse()
505 cbcp_NewPhase(cbcp, CBCP_RESPSENT); /* Wait for an ACK */ in cbcp_SendResponse()
514 cbcp_CheckResponse(struct cbcp *cbcp, struct cbcp_data *data) in cbcp_CheckResponse() argument
524 if (data->type == cbcp->fsm.type) { in cbcp_CheckResponse()
525 switch (cbcp->fsm.type) { in cbcp_CheckResponse()
536 strncpy(cbcp->fsm.phone, addr->addr, sizeof cbcp->fsm.phone - 1); in cbcp_CheckResponse()
537 cbcp->fsm.phone[sizeof cbcp->fsm.phone - 1] = '\0'; in cbcp_CheckResponse()
538 cbcp->fsm.delay = data->delay; in cbcp_CheckResponse()
544 cbcp->fsm.delay = data->delay; in cbcp_CheckResponse()
554 char list[sizeof cbcp->fsm.phone], *next; in cbcp_CheckResponse()
556 strncpy(list, cbcp->fsm.phone, sizeof list - 1); in cbcp_CheckResponse()
560 strcpy(cbcp->fsm.phone, next); in cbcp_CheckResponse()
561 cbcp->fsm.delay = data->delay; in cbcp_CheckResponse()
570 (int)cbcp->fsm.type); in cbcp_CheckResponse()
572 } else if (data->type == CBCP_NONUM && cbcp->fsm.type == CBCP_CLIENTNUM) { in cbcp_CheckResponse()
577 cbcp->fsm.type = CBCP_NONUM; in cbcp_CheckResponse()
585 cbcp_SendAck(struct cbcp *cbcp) in cbcp_SendAck() argument
592 log_Printf(LogCBCP, "%s: SendAck(%d) state = %s\n", cbcp->p->dl->name, in cbcp_SendAck()
593 cbcp->fsm.id, cbcpstate(cbcp->fsm.state)); in cbcp_SendAck()
595 data.type = cbcp->fsm.type; in cbcp_SendAck()
603 strncpy(addr->addr, cbcp->fsm.phone, sizeof addr->addr - 1); in cbcp_SendAck()
605 data.delay = cbcp->fsm.delay; in cbcp_SendAck()
609 data.delay = cbcp->fsm.delay; in cbcp_SendAck()
615 cbcp_Output(cbcp, CBCP_ACK, &data); in cbcp_SendAck()
616 cbcp->fsm.restart--; in cbcp_SendAck()
617 cbcp_StartTimer(cbcp, cbcp->fsm.delay); in cbcp_SendAck()
618 cbcp_NewPhase(cbcp, CBCP_ACKSENT); /* Wait for an ACK */ in cbcp_SendAck()
627 struct cbcp *cbcp = &p->dl->cbcp; in cbcp_Input() local
660 p->dl->name, head->id, cbcpstate(cbcp->fsm.state)); in cbcp_Input()
662 if (cbcp->fsm.state == CBCP_STOPPED || cbcp->fsm.state == CBCP_RESPSENT) { in cbcp_Input()
663 timer_Stop(&cbcp->fsm.timer); in cbcp_Input()
664 if (cbcp_AdjustResponse(cbcp, data)) { in cbcp_Input()
665 cbcp->fsm.restart = DEF_FSMTRIES; in cbcp_Input()
666 cbcp->fsm.id = head->id; in cbcp_Input()
667 cbcp_SendResponse(cbcp); in cbcp_Input()
669 datalink_CBCPFailed(cbcp->p->dl); in cbcp_Input()
676 p->dl->name, head->id, cbcpstate(cbcp->fsm.state)); in cbcp_Input()
678 if (cbcp->fsm.id != head->id) { in cbcp_Input()
680 cbcp->fsm.id, head->id); in cbcp_Input()
681 cbcp->fsm.id = head->id; in cbcp_Input()
683 if (cbcp->fsm.state == CBCP_REQSENT || cbcp->fsm.state == CBCP_ACKSENT) { in cbcp_Input()
684 timer_Stop(&cbcp->fsm.timer); in cbcp_Input()
685 switch (cbcp_CheckResponse(cbcp, data)) { in cbcp_Input()
687 cbcp_SendReq(cbcp); in cbcp_Input()
691 cbcp->fsm.restart = DEF_FSMTRIES; in cbcp_Input()
692 cbcp_SendAck(cbcp); in cbcp_Input()
693 if (cbcp->fsm.type == CBCP_NONUM) { in cbcp_Input()
698 timer_Stop(&cbcp->fsm.timer); in cbcp_Input()
699 datalink_NCPUp(cbcp->p->dl); in cbcp_Input()
704 datalink_CBCPFailed(cbcp->p->dl); in cbcp_Input()
713 p->dl->name, head->id, cbcpstate(cbcp->fsm.state)); in cbcp_Input()
715 if (cbcp->fsm.id != head->id) { in cbcp_Input()
717 cbcp->fsm.id, head->id); in cbcp_Input()
718 cbcp->fsm.id = head->id; in cbcp_Input()
720 if (cbcp->fsm.type == CBCP_NONUM) { in cbcp_Input()
725 timer_Stop(&cbcp->fsm.timer); in cbcp_Input()
726 datalink_NCPUp(cbcp->p->dl); in cbcp_Input()
727 } else if (cbcp->fsm.state == CBCP_RESPSENT) { in cbcp_Input()
728 timer_Stop(&cbcp->fsm.timer); in cbcp_Input()
729 datalink_CBCPComplete(cbcp->p->dl); in cbcp_Input()
746 cbcp_Down(struct cbcp *cbcp) in cbcp_Down() argument
748 timer_Stop(&cbcp->fsm.timer); in cbcp_Down()
749 cbcp_NewPhase(cbcp, CBCP_CLOSED); in cbcp_Down()
750 cbcp->required = 0; in cbcp_Down()
756 if (p->dl->cbcp.fsm.state == CBCP_ACKSENT) { in cbcp_ReceiveTerminateReq()
758 p->dl->cbcp.required = 1; in cbcp_ReceiveTerminateReq()
760 p->dl->cbcp.fsm.phone); in cbcp_ReceiveTerminateReq()
762 cbcp_NewPhase(&p->dl->cbcp, CBCP_CLOSED); in cbcp_ReceiveTerminateReq()