Annotation of lucent/sys/src/9/boot/bri.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.