Annotation of researchv10no/ipc/internet/dkipconfig.c, revision 1.1

1.1     ! root        1: #include <sys/param.h>
        !             2: #include <stdio.h>
        !             3: #include <errno.h>
        !             4: #include <signal.h>
        !             5: #include <sys/ttyio.h>
        !             6: #include <sys/inio.h>
        !             7: #include <sys/filio.h>
        !             8: #include <sys/inet/in.h>
        !             9: #include <ipc.h>
        !            10: 
        !            11: 
        !            12: #define RESETTIME 15*60
        !            13: #define DEFMTU 1500
        !            14: 
        !            15: static char *cmdname;
        !            16: static in_addr myaddr;
        !            17: static in_addr hisaddr;
        !            18: 
        !            19: int dontcheck;
        !            20: FILE *fp;
        !            21: char measnum[32];
        !            22: char himasnum[32];
        !            23: 
        !            24: #define GOSTR "OK - send me your poor, your wretched, your huddled packets waiting to be free\n"
        !            25: 
        !            26: extern char *optarg;
        !            27: extern int optind;
        !            28: 
        !            29: usage(cmd)
        !            30:        char *cmd;
        !            31: {
        !            32:        fprintf(stderr, "Usage: %s [-d] [-m #] dk-address my-ip-addr his-ip-addr\n",
        !            33:                        cmd);
        !            34: }
        !            35: 
        !            36: main(argc, argv)
        !            37: char *argv[];
        !            38: {
        !            39:        int other_end, my_pid, c;
        !            40:        char buf[256];
        !            41:        unsigned int mtu;
        !            42:        int n;
        !            43: 
        !            44:        signal(SIGHUP, SIG_IGN);
        !            45:        cmdname = argv[0];
        !            46: 
        !            47:        mtu = DEFMTU;
        !            48:        while((c=getopt(argc, argv, "dm:")) != -1)
        !            49:                switch(c){
        !            50:                case 'd':
        !            51:                        dontcheck = 1;
        !            52:                        break;
        !            53:                case 'm':
        !            54:                        mtu = atoi(optarg);
        !            55:                        break;
        !            56:                default:
        !            57:                        usage(cmdname);
        !            58:                        break;
        !            59:                }
        !            60: 
        !            61:        switch(argc-optind){
        !            62:        case 2:
        !            63:                close(2);
        !            64:                translate(argv[optind], argv[optind+1]);
        !            65:                ipconfig(0, mtu);
        !            66:                write(0, GOSTR, sizeof(GOSTR)); 
        !            67:                waitforhup(0);
        !            68:                break;
        !            69:        case 3:
        !            70:                detach("dkipconfig");
        !            71:                translate(argv[optind+1], argv[optind+2]);
        !            72:                while(1) {
        !            73:                        other_end = callup(argv[optind], himasnum, measnum, mtu);
        !            74:                        if (other_end < 0) {
        !            75:                                logevent("%s: %s\n", argv[optind], errstr);
        !            76:                                sleep(60);
        !            77:                                continue;
        !            78:                        }
        !            79:                        if (ioctl(other_end, TIOCSPGRP, 0) < 0) {
        !            80:                                logevent("TIOCSPGRP %d\n", errno);
        !            81:                                close(other_end);
        !            82:                                sleep(60);
        !            83:                                continue;
        !            84:                        }
        !            85:                        while((n=read(other_end, buf, sizeof(buf)))>0){
        !            86:                                if(n == sizeof(GOSTR) && strcmp(GOSTR, buf) == 0)
        !            87:                                        break;
        !            88:                        }
        !            89:                        ipconfig(other_end, mtu);
        !            90:                        waitforhup(other_end);
        !            91:                        close(other_end);
        !            92:                }
        !            93:                break;
        !            94:        default:
        !            95:                usage(cmdname);
        !            96:                exit(1);
        !            97:        }
        !            98: }
        !            99: 
        !           100: /*
        !           101:  *  translate names to ip addresses
        !           102:  */
        !           103: translate(me, it)
        !           104:        char *me;
        !           105:        char *it;
        !           106: {
        !           107:        fp = fopen("/usr/ipc/log/dkip", "a");
        !           108:        if(fp==0){
        !           109:                fprintf(stderr, "dkipconfig: can't open log\n", it);
        !           110:                fp = stderr;
        !           111:        }
        !           112:        hisaddr = in_address(it);
        !           113:        if(hisaddr == 0){
        !           114:                logevent("dkipconfig: unknown host/net %s\n", it);
        !           115:                fclose(fp);
        !           116:                exit(1);
        !           117:        }
        !           118:        strcpy(himasnum, in_ntoa(hisaddr));
        !           119:        if(dontcheck)
        !           120:                myaddr = in_address(me);
        !           121:        else
        !           122:                myaddr = in_addronnet(me, hisaddr, 0);
        !           123:        if(myaddr == 0){
        !           124:                logevent("unknown host %s on net %s\n", me,
        !           125:                        in_ntoa(hisaddr));
        !           126:                exit(1);
        !           127:        }
        !           128:        strcpy(measnum, in_ntoa(myaddr));
        !           129:        logevent("connecting as %s to %s\n", measnum, himasnum);
        !           130:        fclose(fp);
        !           131: }
        !           132: 
        !           133: static int
        !           134: ipconfig(ipfd, mtu)
        !           135:        int ipfd;
        !           136:        unsigned int mtu;
        !           137: {
        !           138:        extern int ip_ld;
        !           139: 
        !           140:        if(ioctl(ipfd, FIOPUSHLD, &ip_ld) < 0){
        !           141:                logevent("can't push ip\n");
        !           142:                exit(1);
        !           143:        }
        !           144:        if(ioctl(ipfd, IPIOLOCAL, &myaddr) < 0){
        !           145:                logevent("can't set local address\n");
        !           146:                exit(1);
        !           147:        }
        !           148:        ioctl(ipfd, IPIOMTU, &mtu);
        !           149:        if(in_netof(hisaddr) != hisaddr){
        !           150:                if(ioctl(ipfd, IPIOHOST, &hisaddr) < 0){
        !           151:                        logevent("can't set remote address\n");
        !           152:                        exit(1);
        !           153:                }
        !           154:        } else {
        !           155:                if(ioctl(ipfd, IPIONET, &hisaddr) < 0){
        !           156:                        logevent("can't set network address");
        !           157:                        exit(1);
        !           158:                }
        !           159:        }
        !           160: }
        !           161: 
        !           162: static int
        !           163: callup(host, a1, a2, mtu)
        !           164:        char *host, *a1, *a2;
        !           165:        unsigned int mtu;
        !           166: {
        !           167:        char cmd[512];
        !           168:        int fd;
        !           169: 
        !           170:        fd=ipcopen(ipcpath(host, "dk", "dkip"), "heavy");
        !           171:        if(fd<0)
        !           172:                return(fd);
        !           173:        sprintf(cmd, "-m %d %s %s", mtu, a1, a2);
        !           174:        write(fd, cmd, strlen(cmd)+1);
        !           175:        return(fd);
        !           176: }
        !           177: 
        !           178: waitforhup(fd)
        !           179: {
        !           180:        char buf[128];
        !           181: 
        !           182:        while(read(fd, buf, sizeof(buf))>0)
        !           183:                ;
        !           184: }

unix.superglobalmegacorp.com

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