• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-12-stable/usr.sbin/ppp/

Lines Matching defs:cbcp

57 #include "cbcp.h"
65 cbcp_Init(struct cbcp *cbcp, struct physical *p)
67 cbcp->required = 0;
68 cbcp->fsm.state = CBCP_CLOSED;
69 cbcp->fsm.id = 0;
70 cbcp->fsm.delay = 0;
71 *cbcp->fsm.phone = '\0';
72 memset(&cbcp->fsm.timer, '\0', sizeof cbcp->fsm.timer);
73 cbcp->p = p;
76 static void cbcp_SendReq(struct cbcp *);
77 static void cbcp_SendResponse(struct cbcp *);
78 static void cbcp_SendAck(struct cbcp *);
83 struct cbcp *cbcp = (struct cbcp *)v;
85 timer_Stop(&cbcp->fsm.timer);
86 if (cbcp->fsm.restart) {
87 switch (cbcp->fsm.state) {
91 cbcp->p->dl->name);
95 cbcp_SendReq(cbcp);
98 cbcp_SendResponse(cbcp);
101 cbcp_SendAck(cbcp);
107 switch (cbcp->fsm.state) {
122 cbcp->p->dl->name);
128 cbcp->p->dl->name, missed);
129 datalink_CBCPFailed(cbcp->p->dl);
134 cbcp_StartTimer(struct cbcp *cbcp, int timeout)
136 timer_Stop(&cbcp->fsm.timer);
137 cbcp->fsm.timer.func = cbcp_Timeout;
138 cbcp->fsm.timer.name = "cbcp";
139 cbcp->fsm.timer.load = timeout * SECTICKS;
140 cbcp->fsm.timer.arg = cbcp;
141 timer_Start(&cbcp->fsm.timer);
163 cbcp_NewPhase(struct cbcp *cbcp, int new)
165 if (cbcp->fsm.state != new) {
166 log_Printf(LogCBCP, "%s: State change %s --> %s\n", cbcp->p->dl->name,
167 cbcpstate(cbcp->fsm.state), cbcpstate(new));
168 cbcp->fsm.state = new;
198 cbcp_Output(struct cbcp *cbcp, u_char code, struct cbcp_data *data)
206 head->id = cbcp->fsm.id;
210 link_PushPacket(&cbcp->p->link, bp, cbcp->p->dl->bundle,
211 LINK_QUEUES(&cbcp->p->link) - 1, PROTO_CBCP);
258 cbcp_SendReq(struct cbcp *cbcp)
262 char list[sizeof cbcp->fsm.phone], *next;
267 log_Printf(LogCBCP, "%s: SendReq(%d) state = %s\n", cbcp->p->dl->name,
268 cbcp->fsm.id, cbcpstate(cbcp->fsm.state));
269 data.type = cbcp->fsm.type;
271 strncpy(list, cbcp->fsm.phone, sizeof list - 1);
309 cbcp_Output(cbcp, CBCP_REQ, &data);
310 cbcp->fsm.restart--;
311 cbcp_StartTimer(cbcp, cbcp->fsm.delay);
312 cbcp_NewPhase(cbcp, CBCP_REQSENT); /* Wait for a RESPONSE */
316 cbcp_Up(struct cbcp *cbcp)
318 struct lcp *lcp = &cbcp->p->link.lcp;
320 cbcp->fsm.delay = cbcp->p->dl->cfg.cbcp.delay;
321 if (*cbcp->p->dl->peer.authname == '\0' ||
322 !auth_SetPhoneList(cbcp->p->dl->peer.authname, cbcp->fsm.phone,
323 sizeof cbcp->fsm.phone)) {
324 strncpy(cbcp->fsm.phone, cbcp->p->dl->cfg.cbcp.phone,
325 sizeof cbcp->fsm.phone - 1);
326 cbcp->fsm.phone[sizeof cbcp->fsm.phone - 1] = '\0';
330 if (*cbcp->fsm.phone == '\0')
331 cbcp->fsm.type = CBCP_NONUM;
332 else if (!strcmp(cbcp->fsm.phone, "*")) {
333 cbcp->fsm.type = CBCP_SERVERNUM;
334 *cbcp->fsm.phone = '\0';
336 cbcp->fsm.type = CBCP_CLIENTNUM;
337 cbcp_NewPhase(cbcp, CBCP_STOPPED); /* Wait for a REQ */
338 cbcp_StartTimer(cbcp, cbcp->fsm.delay * DEF_FSMTRIES);
340 if (*cbcp->fsm.phone == '\0')
341 cbcp->fsm.type = CBCP_NONUM;
342 else if (!strcmp(cbcp->fsm.phone, "*")) {
343 cbcp->fsm.type = CBCP_CLIENTNUM;
344 *cbcp->fsm.phone = '\0';
345 } else if (strchr(cbcp->fsm.phone, ','))
346 cbcp->fsm.type = CBCP_LISTNUM;
348 cbcp->fsm.type = CBCP_SERVERNUM;
349 cbcp->fsm.restart = DEF_FSMTRIES;
350 cbcp_SendReq(cbcp);
355 cbcp_AdjustResponse(struct cbcp *cbcp, struct cbcp_data *data)
358 * We've received a REQ (data). Adjust our response (cbcp->fsm.*)
365 if (cbcp->p->dl->cfg.callback.opmask & CALLBACK_BIT(CALLBACK_NONE))
368 * (ie, ``set callback cbcp none''), go along with the callees
371 cbcp->fsm.type = CBCP_NONUM;
382 if (cbcp->fsm.type == CBCP_CLIENTNUM) {
398 ptr = strchr(cbcp->fsm.phone, ',');
407 if (cbcp->fsm.type == CBCP_SERVERNUM) {
408 *cbcp->fsm.phone = '\0';
423 } else if (cbcp->fsm.type == CBCP_CLIENTNUM) {
429 char list[sizeof cbcp->fsm.phone], *next;
431 strncpy(list, cbcp->fsm.phone, sizeof list - 1);
435 cbcp->fsm.type = CBCP_SERVERNUM;
436 strcpy(cbcp->fsm.phone, next);
445 if (cbcp->fsm.type == CBCP_CLIENTNUM || cbcp->fsm.type == CBCP_LISTNUM) {
447 * Search through ``data''s addresses and see if cbcp->fsm.phone
450 char list[sizeof cbcp->fsm.phone], *next, *end;
457 strncpy(list, cbcp->fsm.phone, sizeof list - 1);
461 cbcp->fsm.type = CBCP_LISTNUM;
462 strcpy(cbcp->fsm.phone, next);
480 cbcp_SendResponse(struct cbcp *cbcp)
487 log_Printf(LogCBCP, "%s: SendResponse(%d) state = %s\n", cbcp->p->dl->name,
488 cbcp->fsm.id, cbcpstate(cbcp->fsm.state));
490 data.type = cbcp->fsm.type;
491 data.delay = cbcp->fsm.delay;
495 else if (*cbcp->fsm.phone) {
497 strncpy(addr->addr, cbcp->fsm.phone, sizeof addr->addr - 1);
504 cbcp_Output(cbcp, CBCP_RESPONSE, &data);
505 cbcp->fsm.restart--;
506 cbcp_StartTimer(cbcp, cbcp->fsm.delay);
507 cbcp_NewPhase(cbcp, CBCP_RESPSENT); /* Wait for an ACK */
516 cbcp_CheckResponse(struct cbcp *cbcp, struct cbcp_data *data)
520 * our REQ (cbcp->fsm)
526 if (data->type == cbcp->fsm.type) {
527 switch (cbcp->fsm.type) {
538 strncpy(cbcp->fsm.phone, addr->addr, sizeof cbcp->fsm.phone - 1);
539 cbcp->fsm.phone[sizeof cbcp->fsm.phone - 1] = '\0';
540 cbcp->fsm.delay = data->delay;
546 cbcp->fsm.delay = data->delay;
556 char list[sizeof cbcp->fsm.phone], *next;
558 strncpy(list, cbcp->fsm.phone, sizeof list - 1);
562 strcpy(cbcp->fsm.phone, next);
563 cbcp->fsm.delay = data->delay;
572 (int)cbcp->fsm.type);
574 } else if (data->type == CBCP_NONUM && cbcp->fsm.type == CBCP_CLIENTNUM) {
577 * We only allow this when ``set cbcp *'' has been specified.
579 cbcp->fsm.type = CBCP_NONUM;
587 cbcp_SendAck(struct cbcp *cbcp)
594 log_Printf(LogCBCP, "%s: SendAck(%d) state = %s\n", cbcp->p->dl->name,
595 cbcp->fsm.id, cbcpstate(cbcp->fsm.state));
597 data.type = cbcp->fsm.type;
605 strncpy(addr->addr, cbcp->fsm.phone, sizeof addr->addr - 1);
607 data.delay = cbcp->fsm.delay;
611 data.delay = cbcp->fsm.delay;
617 cbcp_Output(cbcp, CBCP_ACK, &data);
618 cbcp->fsm.restart--;
619 cbcp_StartTimer(cbcp, cbcp->fsm.delay);
620 cbcp_NewPhase(cbcp, CBCP_ACKSENT); /* Wait for an ACK */
629 struct cbcp *cbcp = &p->dl->cbcp;
662 p->dl->name, head->id, cbcpstate(cbcp->fsm.state));
664 if (cbcp->fsm.state == CBCP_STOPPED || cbcp->fsm.state == CBCP_RESPSENT) {
665 timer_Stop(&cbcp->fsm.timer);
666 if (cbcp_AdjustResponse(cbcp, data)) {
667 cbcp->fsm.restart = DEF_FSMTRIES;
668 cbcp->fsm.id = head->id;
669 cbcp_SendResponse(cbcp);
671 datalink_CBCPFailed(cbcp->p->dl);
678 p->dl->name, head->id, cbcpstate(cbcp->fsm.state));
680 if (cbcp->fsm.id != head->id) {
682 cbcp->fsm.id, head->id);
683 cbcp->fsm.id = head->id;
685 if (cbcp->fsm.state == CBCP_REQSENT || cbcp->fsm.state == CBCP_ACKSENT) {
686 timer_Stop(&cbcp->fsm.timer);
687 switch (cbcp_CheckResponse(cbcp, data)) {
689 cbcp_SendReq(cbcp);
693 cbcp->fsm.restart = DEF_FSMTRIES;
694 cbcp_SendAck(cbcp);
695 if (cbcp->fsm.type == CBCP_NONUM) {
700 timer_Stop(&cbcp->fsm.timer);
701 datalink_NCPUp(cbcp->p->dl);
706 datalink_CBCPFailed(cbcp->p->dl);
715 p->dl->name, head->id, cbcpstate(cbcp->fsm.state));
717 if (cbcp->fsm.id != head->id) {
719 cbcp->fsm.id, head->id);
720 cbcp->fsm.id = head->id;
722 if (cbcp->fsm.type == CBCP_NONUM) {
727 timer_Stop(&cbcp->fsm.timer);
728 datalink_NCPUp(cbcp->p->dl);
729 } else if (cbcp->fsm.state == CBCP_RESPSENT) {
730 timer_Stop(&cbcp->fsm.timer);
731 datalink_CBCPComplete(cbcp->p->dl);
748 cbcp_Down(struct cbcp *cbcp)
750 timer_Stop(&cbcp->fsm.timer);
751 cbcp_NewPhase(cbcp, CBCP_CLOSED);
752 cbcp->required = 0;
758 if (p->dl->cbcp.fsm.state == CBCP_ACKSENT) {
760 p->dl->cbcp.required = 1;
762 p->dl->cbcp.fsm.phone);
764 cbcp_NewPhase(&p->dl->cbcp, CBCP_CLOSED);