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