|
|
1.1 ! root 1: /* ! 2: * Generic dialer routine. Usage: ! 3: * dialer mount-pt [unit] ! 4: */ ! 5: #include <stdio.h> ! 6: #include <ipc.h> ! 7: #include <libc.h> ! 8: #include <utsname.h> ! 9: #include "defs.h" ! 10: ! 11: /* export */ ! 12: char *av0; ! 13: int unit='a'; /* a(ny), 0, 2, or b(oth) */ ! 14: char *param; ! 15: char *netfiles = "/dev/dk/dk"; ! 16: int debug; ! 17: ! 18: /* cheap foiegn imports */ ! 19: extern void dodialout(), dodialin(); ! 20: ! 21: usage(name) ! 22: char *name; ! 23: { ! 24: fprintf(stderr, "usage: %s [-m mount-pt] [-n netname] [-u [02ab]] [-t [02]]\n", name); ! 25: exit(1); ! 26: } ! 27: ! 28: main(ac, av) ! 29: int ac; ! 30: char *av[]; ! 31: { ! 32: char *netname=NULL, *mtpt="dk", *cp; ! 33: int ai; ! 34: char xbuf[3]; ! 35: ! 36: av0 = av[0]; ! 37: chdir("/cs"); ! 38: ! 39: /* get args */ ! 40: for (ai=1; ai<ac; ai++) { ! 41: if (av[ai][0] == '-') ! 42: for (cp=&av[ai][1]; *cp; cp++) { ! 43: switch(*cp) { ! 44: case 'm': ! 45: if (ai+1>=ac) ! 46: usage(av[0]); ! 47: mtpt = av[++ai]; ! 48: break; ! 49: case 'n': ! 50: if (ai+1>=ac) ! 51: usage(av[0]); ! 52: netname = av[++ai]; ! 53: break; ! 54: case 'N': ! 55: if (ai+1>=ac) ! 56: usage(av[0]); ! 57: netfiles = av[++ai]; ! 58: break; ! 59: case '0': ! 60: case '2': ! 61: case 'b': ! 62: case 'a': ! 63: unit = *cp; ! 64: break; ! 65: case 'd': ! 66: debug = 1; ! 67: break; ! 68: case 't': ! 69: if (ai+1>=ac) ! 70: usage(av[0]); ! 71: switch(*av[++ai]) { ! 72: case '0': ! 73: param = "light"; ! 74: break; ! 75: case '2': ! 76: param = "heavy"; ! 77: break; ! 78: default: ! 79: usage(av[0]); ! 80: } ! 81: break; ! 82: case 'u': ! 83: if (ai+1>=ac) ! 84: usage(av[0]); ! 85: switch(*av[++ai]) { ! 86: case 'a': ! 87: case 'b': ! 88: case '0': ! 89: case '2': ! 90: unit = *av[ai]; ! 91: break; ! 92: default: ! 93: usage(av[0]); ! 94: } ! 95: break; ! 96: default: ! 97: usage(av0); ! 98: } ! 99: } ! 100: else ! 101: usage(av0); ! 102: } ! 103: if (!debug) ! 104: detach(mtpt); ! 105: ! 106: /* get defaults */ ! 107: if (netname==NULL) { ! 108: struct utsname name; ! 109: ! 110: uname(&name); ! 111: netname = name.nodename; ! 112: } ! 113: ! 114: /* create dialer and listener */ ! 115: switch (fork()) { ! 116: case -1: ! 117: perror(av0); ! 118: exit(1); ! 119: case 0: ! 120: for(;;) ! 121: dodialout(mtpt); ! 122: default: ! 123: if (unit == 'b') ! 124: switch(fork()) { ! 125: case -1: ! 126: perror("dkdialer"); ! 127: exit(1); ! 128: case 0: ! 129: if (param==NULL) ! 130: param = "heavy"; ! 131: unit = '2'; ! 132: for(;;) ! 133: dodialin(mtpt, netname, param); ! 134: default: ! 135: if (param==NULL) ! 136: param = "light"; ! 137: unit = '0'; ! 138: break; ! 139: } ! 140: if (param==NULL) ! 141: param = "heavy"; ! 142: xbuf[0] = ' '; ! 143: xbuf[1] = unit; ! 144: xbuf[2] = 0; ! 145: strcat(av0, xbuf); ! 146: for(;;) ! 147: dodialin(mtpt, netname, param); ! 148: } ! 149: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.