Annotation of lucent/sys/src/9/boot/bri.c, revision 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.