datalink.c (43693) | datalink.c (43888) |
---|---|
1/*- 2 * Copyright (c) 1998 Brian Somers <brian@Awfulhak.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 9 unchanged lines hidden (view full) --- 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * | 1/*- 2 * Copyright (c) 1998 Brian Somers <brian@Awfulhak.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 9 unchanged lines hidden (view full) --- 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * |
26 * $Id: datalink.c,v 1.28 1999/02/02 09:35:17 brian Exp $ | 26 * $Id: datalink.c,v 1.29 1999/02/06 02:54:44 brian Exp $ |
27 */ 28 29#include <sys/param.h> 30#include <netinet/in.h> 31#include <netinet/in_systm.h> 32#include <netinet/ip.h> 33#include <sys/un.h> 34 --- 295 unchanged lines hidden (view full) --- 330 } 331 break; 332 333 case DATALINK_READY: 334 case DATALINK_LCP: 335 case DATALINK_AUTH: 336 case DATALINK_CBCP: 337 case DATALINK_OPEN: | 27 */ 28 29#include <sys/param.h> 30#include <netinet/in.h> 31#include <netinet/in_systm.h> 32#include <netinet/ip.h> 33#include <sys/un.h> 34 --- 295 unchanged lines hidden (view full) --- 330 } 331 break; 332 333 case DATALINK_READY: 334 case DATALINK_LCP: 335 case DATALINK_AUTH: 336 case DATALINK_CBCP: 337 case DATALINK_OPEN: |
338 result = descriptor_UpdateSet(&dl->physical->desc, r, w, e, n); | 338 result = descriptor_UpdateSet(&dl->chap.desc, r, w, e, n) + 339 descriptor_UpdateSet(&dl->physical->desc, r, w, e, n); |
339 break; 340 } 341 return result; 342} 343 344int 345datalink_RemoveFromSet(struct datalink *dl, fd_set *r, fd_set *w, fd_set *e) 346{ --- 15 unchanged lines hidden (view full) --- 362 case DATALINK_LOGIN: 363 return descriptor_IsSet(&dl->chat.desc, fdset); 364 365 case DATALINK_READY: 366 case DATALINK_LCP: 367 case DATALINK_AUTH: 368 case DATALINK_CBCP: 369 case DATALINK_OPEN: | 340 break; 341 } 342 return result; 343} 344 345int 346datalink_RemoveFromSet(struct datalink *dl, fd_set *r, fd_set *w, fd_set *e) 347{ --- 15 unchanged lines hidden (view full) --- 363 case DATALINK_LOGIN: 364 return descriptor_IsSet(&dl->chat.desc, fdset); 365 366 case DATALINK_READY: 367 case DATALINK_LCP: 368 case DATALINK_AUTH: 369 case DATALINK_CBCP: 370 case DATALINK_OPEN: |
370 return descriptor_IsSet(&dl->physical->desc, fdset); | 371 return descriptor_IsSet(&dl->chap.desc, fdset) ? 1 : 372 descriptor_IsSet(&dl->physical->desc, fdset); |
371 } 372 return 0; 373} 374 375static void 376datalink_Read(struct descriptor *d, struct bundle *bundle, const fd_set *fdset) 377{ 378 struct datalink *dl = descriptor2datalink(d); --- 9 unchanged lines hidden (view full) --- 388 descriptor_Read(&dl->chat.desc, bundle, fdset); 389 break; 390 391 case DATALINK_READY: 392 case DATALINK_LCP: 393 case DATALINK_AUTH: 394 case DATALINK_CBCP: 395 case DATALINK_OPEN: | 373 } 374 return 0; 375} 376 377static void 378datalink_Read(struct descriptor *d, struct bundle *bundle, const fd_set *fdset) 379{ 380 struct datalink *dl = descriptor2datalink(d); --- 9 unchanged lines hidden (view full) --- 390 descriptor_Read(&dl->chat.desc, bundle, fdset); 391 break; 392 393 case DATALINK_READY: 394 case DATALINK_LCP: 395 case DATALINK_AUTH: 396 case DATALINK_CBCP: 397 case DATALINK_OPEN: |
396 descriptor_Read(&dl->physical->desc, bundle, fdset); | 398 if (descriptor_IsSet(&dl->chap.desc, fdset)) 399 descriptor_Read(&dl->chap.desc, bundle, fdset); 400 if (descriptor_IsSet(&dl->physical->desc, fdset)) 401 descriptor_Read(&dl->physical->desc, bundle, fdset); |
397 break; 398 } 399} 400 401static int 402datalink_Write(struct descriptor *d, struct bundle *bundle, const fd_set *fdset) 403{ 404 struct datalink *dl = descriptor2datalink(d); --- 10 unchanged lines hidden (view full) --- 415 result = descriptor_Write(&dl->chat.desc, bundle, fdset); 416 break; 417 418 case DATALINK_READY: 419 case DATALINK_LCP: 420 case DATALINK_AUTH: 421 case DATALINK_CBCP: 422 case DATALINK_OPEN: | 402 break; 403 } 404} 405 406static int 407datalink_Write(struct descriptor *d, struct bundle *bundle, const fd_set *fdset) 408{ 409 struct datalink *dl = descriptor2datalink(d); --- 10 unchanged lines hidden (view full) --- 420 result = descriptor_Write(&dl->chat.desc, bundle, fdset); 421 break; 422 423 case DATALINK_READY: 424 case DATALINK_LCP: 425 case DATALINK_AUTH: 426 case DATALINK_CBCP: 427 case DATALINK_OPEN: |
423 result = descriptor_Write(&dl->physical->desc, bundle, fdset); | 428 if (descriptor_IsSet(&dl->chap.desc, fdset)) 429 result += descriptor_Write(&dl->chap.desc, bundle, fdset); 430 if (descriptor_IsSet(&dl->physical->desc, fdset)) 431 result += descriptor_Write(&dl->physical->desc, bundle, fdset); |
424 break; 425 } 426 427 return result; 428} 429 430static void 431datalink_ComeDown(struct datalink *dl, int how) --- 104 unchanged lines hidden (view full) --- 536 bundle_NewPhase(dl->bundle, PHASE_NETWORK); 537 (*dl->parent->LayerUp)(dl->parent->object, &dl->physical->link.lcp.fsm); 538} 539 540void 541datalink_CBCPComplete(struct datalink *dl) 542{ 543 datalink_NewState(dl, DATALINK_LCP); | 432 break; 433 } 434 435 return result; 436} 437 438static void 439datalink_ComeDown(struct datalink *dl, int how) --- 104 unchanged lines hidden (view full) --- 544 bundle_NewPhase(dl->bundle, PHASE_NETWORK); 545 (*dl->parent->LayerUp)(dl->parent->object, &dl->physical->link.lcp.fsm); 546} 547 548void 549datalink_CBCPComplete(struct datalink *dl) 550{ 551 datalink_NewState(dl, DATALINK_LCP); |
552 chap_ReInit(&dl->chap); |
|
544 fsm_Close(&dl->physical->link.lcp.fsm); 545} 546 547void 548datalink_CBCPFailed(struct datalink *dl) 549{ 550 cbcp_Down(&dl->cbcp); 551 datalink_CBCPComplete(dl); --- 10 unchanged lines hidden (view full) --- 562 CALLBACK_BIT(CALLBACK_AUTH))) { 563 /* We must have agreed CBCP if AUTH isn't there any more */ 564 datalink_NewState(dl, DATALINK_CBCP); 565 cbcp_Up(&dl->cbcp); 566 } else if (dl->physical->link.lcp.want_callback.opmask) { 567 /* It's not CBCP */ 568 log_Printf(LogPHASE, "%s: Shutdown and await peer callback\n", dl->name); 569 datalink_NewState(dl, DATALINK_LCP); | 553 fsm_Close(&dl->physical->link.lcp.fsm); 554} 555 556void 557datalink_CBCPFailed(struct datalink *dl) 558{ 559 cbcp_Down(&dl->cbcp); 560 datalink_CBCPComplete(dl); --- 10 unchanged lines hidden (view full) --- 571 CALLBACK_BIT(CALLBACK_AUTH))) { 572 /* We must have agreed CBCP if AUTH isn't there any more */ 573 datalink_NewState(dl, DATALINK_CBCP); 574 cbcp_Up(&dl->cbcp); 575 } else if (dl->physical->link.lcp.want_callback.opmask) { 576 /* It's not CBCP */ 577 log_Printf(LogPHASE, "%s: Shutdown and await peer callback\n", dl->name); 578 datalink_NewState(dl, DATALINK_LCP); |
579 chap_ReInit(&dl->chap); |
|
570 fsm_Close(&dl->physical->link.lcp.fsm); 571 } else 572 switch (dl->physical->link.lcp.his_callback.opmask) { 573 case 0: 574 datalink_NCPUp(dl); 575 break; 576 577 case CALLBACK_BIT(CALLBACK_AUTH): --- 8 unchanged lines hidden (view full) --- 586 if (ptr) 587 *ptr = '\0'; /* Call back on the first number */ 588 log_Printf(LogPHASE, "%s: Calling peer back on %s\n", dl->name, 589 dl->cbcp.fsm.phone); 590 dl->cbcp.required = 1; 591 } 592 dl->cbcp.fsm.delay = 0; 593 datalink_NewState(dl, DATALINK_LCP); | 580 fsm_Close(&dl->physical->link.lcp.fsm); 581 } else 582 switch (dl->physical->link.lcp.his_callback.opmask) { 583 case 0: 584 datalink_NCPUp(dl); 585 break; 586 587 case CALLBACK_BIT(CALLBACK_AUTH): --- 8 unchanged lines hidden (view full) --- 596 if (ptr) 597 *ptr = '\0'; /* Call back on the first number */ 598 log_Printf(LogPHASE, "%s: Calling peer back on %s\n", dl->name, 599 dl->cbcp.fsm.phone); 600 dl->cbcp.required = 1; 601 } 602 dl->cbcp.fsm.delay = 0; 603 datalink_NewState(dl, DATALINK_LCP); |
604 chap_ReInit(&dl->chap); |
|
594 fsm_Close(&dl->physical->link.lcp.fsm); 595 break; 596 597 case CALLBACK_BIT(CALLBACK_E164): 598 strncpy(dl->cbcp.fsm.phone, dl->physical->link.lcp.his_callback.msg, 599 sizeof dl->cbcp.fsm.phone - 1); 600 dl->cbcp.fsm.phone[sizeof dl->cbcp.fsm.phone - 1] = '\0'; 601 log_Printf(LogPHASE, "%s: Calling peer back on %s\n", dl->name, 602 dl->cbcp.fsm.phone); 603 dl->cbcp.required = 1; 604 dl->cbcp.fsm.delay = 0; 605 datalink_NewState(dl, DATALINK_LCP); | 605 fsm_Close(&dl->physical->link.lcp.fsm); 606 break; 607 608 case CALLBACK_BIT(CALLBACK_E164): 609 strncpy(dl->cbcp.fsm.phone, dl->physical->link.lcp.his_callback.msg, 610 sizeof dl->cbcp.fsm.phone - 1); 611 dl->cbcp.fsm.phone[sizeof dl->cbcp.fsm.phone - 1] = '\0'; 612 log_Printf(LogPHASE, "%s: Calling peer back on %s\n", dl->name, 613 dl->cbcp.fsm.phone); 614 dl->cbcp.required = 1; 615 dl->cbcp.fsm.delay = 0; 616 datalink_NewState(dl, DATALINK_LCP); |
617 chap_ReInit(&dl->chap); |
|
606 fsm_Close(&dl->physical->link.lcp.fsm); 607 break; 608 609 default: 610 log_Printf(LogPHASE, "%s: Oops - Should have NAK'd peer callback !\n", 611 dl->name); 612 datalink_NewState(dl, DATALINK_LCP); | 618 fsm_Close(&dl->physical->link.lcp.fsm); 619 break; 620 621 default: 622 log_Printf(LogPHASE, "%s: Oops - Should have NAK'd peer callback !\n", 623 dl->name); 624 datalink_NewState(dl, DATALINK_LCP); |
625 chap_ReInit(&dl->chap); |
|
613 fsm_Close(&dl->physical->link.lcp.fsm); 614 break; 615 } 616} 617 618void 619datalink_AuthNotOk(struct datalink *dl) 620{ 621 datalink_NewState(dl, DATALINK_LCP); | 626 fsm_Close(&dl->physical->link.lcp.fsm); 627 break; 628 } 629} 630 631void 632datalink_AuthNotOk(struct datalink *dl) 633{ 634 datalink_NewState(dl, DATALINK_LCP); |
635 chap_ReInit(&dl->chap); |
|
622 fsm_Close(&dl->physical->link.lcp.fsm); 623} 624 625static void 626datalink_LayerDown(void *v, struct fsm *fp) 627{ 628 /* The given FSM has been told to come down */ 629 struct datalink *dl = (struct datalink *)v; --- 12 unchanged lines hidden (view full) --- 642 cbcp_Down(&dl->cbcp); 643 /* fall through (just in case) */ 644 645 case DATALINK_AUTH: 646 timer_Stop(&dl->pap.authtimer); 647 timer_Stop(&dl->chap.auth.authtimer); 648 } 649 datalink_NewState(dl, DATALINK_LCP); | 636 fsm_Close(&dl->physical->link.lcp.fsm); 637} 638 639static void 640datalink_LayerDown(void *v, struct fsm *fp) 641{ 642 /* The given FSM has been told to come down */ 643 struct datalink *dl = (struct datalink *)v; --- 12 unchanged lines hidden (view full) --- 656 cbcp_Down(&dl->cbcp); 657 /* fall through (just in case) */ 658 659 case DATALINK_AUTH: 660 timer_Stop(&dl->pap.authtimer); 661 timer_Stop(&dl->chap.auth.authtimer); 662 } 663 datalink_NewState(dl, DATALINK_LCP); |
664 chap_ReInit(&dl->chap); |
|
650 } 651} 652 653static void 654datalink_LayerFinish(void *v, struct fsm *fp) 655{ 656 /* The given fsm is now down */ 657 struct datalink *dl = (struct datalink *)v; --- 214 unchanged lines hidden (view full) --- 872 case DATALINK_OPEN: 873 peerid_Init(&dl->peer); 874 fsm2initial(&dl->physical->link.ccp.fsm); 875 /* fall through */ 876 877 case DATALINK_CBCP: 878 case DATALINK_AUTH: 879 case DATALINK_LCP: | 665 } 666} 667 668static void 669datalink_LayerFinish(void *v, struct fsm *fp) 670{ 671 /* The given fsm is now down */ 672 struct datalink *dl = (struct datalink *)v; --- 214 unchanged lines hidden (view full) --- 887 case DATALINK_OPEN: 888 peerid_Init(&dl->peer); 889 fsm2initial(&dl->physical->link.ccp.fsm); 890 /* fall through */ 891 892 case DATALINK_CBCP: 893 case DATALINK_AUTH: 894 case DATALINK_LCP: |
895 chap_ReInit(&dl->chap); |
|
880 fsm_Close(&dl->physical->link.lcp.fsm); 881 if (how != CLOSE_NORMAL) { 882 dl->dial_tries = -1; 883 dl->reconnect_tries = 0; 884 if (how == CLOSE_LCP) 885 dl->stayonline = 1; 886 } 887 break; --- 398 unchanged lines hidden --- | 896 fsm_Close(&dl->physical->link.lcp.fsm); 897 if (how != CLOSE_NORMAL) { 898 dl->dial_tries = -1; 899 dl->reconnect_tries = 0; 900 if (how == CLOSE_LCP) 901 dl->stayonline = 1; 902 } 903 break; --- 398 unchanged lines hidden --- |