|
|
1.1 ! root 1: #include <u.h> ! 2: #include <libc.h> ! 3: #include <auth.h> ! 4: #include <../boot/boot.h> ! 5: ! 6: void ! 7: configbri(Method *mp) ! 8: { ! 9: char trbuf[TICKREQLEN]; ! 10: int devno = 0; ! 11: int fd, n, chan, i; ! 12: int pfd[2]; ! 13: char dbuf[8], sbuf[8], rbuf[8]; ! 14: char *argv[16]; ! 15: char buf[128], file[3*NAMELEN]; ! 16: char dialstr[32]; ! 17: char *p; ! 18: char *dbg, *dkptr; ! 19: ! 20: if(p = strchr(mp->arg, ';')){ /* assign = */ ! 21: dbg = mp->arg; ! 22: *p++ = 0; ! 23: dkptr = p; ! 24: }else{ ! 25: dbg = 0; ! 26: dkptr = mp->arg; ! 27: } ! 28: fd = connectlocal(); ! 29: if(fd < 0) ! 30: fatal("no local file system"); ! 31: if(fsession(fd, trbuf) < 0) ! 32: fatal("fsession failed on #s/kfs"); ! 33: if(mount(fd, "/", MAFTER|MCREATE, "") < 0) ! 34: fatal("can't mount kfs"); ! 35: close(fd); ! 36: ! 37: if(pipe(pfd)<0) ! 38: fatal("pipe"); ! 39: switch(fork()){ ! 40: case -1: ! 41: fatal("fork"); ! 42: case 0: ! 43: i = 0; ! 44: argv[i++] = "briserver"; ! 45: if(dbg){ ! 46: argv[i++] = "-D"; ! 47: argv[i++] = dbg; ! 48: } ! 49: argv[i++] = "-d"; ! 50: argv[i++] = dbuf; ! 51: sprint(dbuf, "%d", devno); ! 52: argv[i++] = "-s"; ! 53: argv[i++] = sbuf; ! 54: sprint(sbuf, "%d", pfd[0]); ! 55: argv[i++] = rbuf; ! 56: sprint(rbuf, "%d", pfd[1]); ! 57: argv[i] = 0; ! 58: exec("/68020/bin/isdn/briserver", argv); ! 59: fatal("can't exec briserver"); ! 60: default: ! 61: break; ! 62: } ! 63: close(pfd[1]); ! 64: if(fsession(pfd[0], trbuf) < 0) ! 65: fatal("fsession failed on /dev/bri0"); ! 66: if(mount(pfd[0], "/dev", MAFTER, "") < 0) ! 67: fatal("can't mount /dev/bri0"); ! 68: close(pfd[0]); ! 69: ! 70: sprint(file, "/dev/bri%d/dial", devno); ! 71: do{ ! 72: fd = open(file, ORDWR); ! 73: if(fd < 0) ! 74: fatal(file); ! 75: memset(dialstr, 0, sizeof(dialstr)); ! 76: outin(0, "Number please ", dialstr, sizeof(dialstr)); ! 77: fprint(fd, "c/0 %s\n", dialstr); ! 78: n = read(fd, buf, sizeof buf-1); ! 79: close(fd); ! 80: if(n <= 0) ! 81: fatal("EOF from dialer"); ! 82: buf[n] = 0; ! 83: write(1, buf, n); ! 84: }while(strncmp(buf, "connected", 9) != 0); ! 85: p = strchr(buf, '/'); ! 86: if(p == 0) ! 87: fatal("bad reply from bri server"); ! 88: else ! 89: p++; ! 90: chan = strtoul(p, 0, 0); ! 91: if(chan < 1 || chan > 2) ! 92: fatal("bad channel from bri server"); ! 93: sprint(file, "#J%d/b1xb2", devno); ! 94: fd = open(file, OWRITE); ! 95: if(fd < 0) ! 96: fatal(file); ! 97: sendmsg(fd, (chan==2) ? "0" : "1"); ! 98: close(fd); ! 99: chan = 2; ! 100: ! 101: switch(fork()){ ! 102: case -1: ! 103: fatal("fork"); ! 104: case 0: ! 105: execl("/68020/bin/isdn/dkbrimon", "dkbrimon", dialstr, 0); ! 106: fatal("can't exec dkbrimon"); ! 107: default: ! 108: break; ! 109: } ! 110: sprint(file, "#H%d/ctl", 2*devno+chan-1); ! 111: fd = open(file, ORDWR); ! 112: if(fd < 0) ! 113: fatal(file); ! 114: sendmsg(fd, "hdlc on"); ! 115: sendmsg(fd, "recven"); ! 116: sendmsg(fd, "push dkmux"); ! 117: sendmsg(fd, dkptr); ! 118: close(fd); ! 119: } ! 120: ! 121: int ! 122: authbri(void) ! 123: { ! 124: return dkauth(); ! 125: } ! 126: ! 127: int ! 128: connectbri(void) ! 129: { ! 130: return dkconnect(); ! 131: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.