Annotation of 41BSD/cmd/berknet/setup.c, revision 1.1.1.1

1.1       root        1: /*
                      2:        setup.c
                      3: 
                      4:        support procedures used in setting up the network
                      5: 
                      6: */
                      7: 
                      8: # include "defs.h"
                      9: 
                     10: char logfile[] =       LOGFILE;
                     11: 
                     12: /* global variables */
                     13: struct daemonparms netd;
                     14: 
                     15: /*
                     16:        called in netdaemon and debugging software
                     17:        handles parameter lists to setup
                     18:        remote machine and pipes
                     19: */
                     20: setupdaemon(argc,argv)
                     21: char **argv;{
                     22:        long timev;
                     23:        int timei;
                     24:        FILE *cfile;
                     25: 
                     26:        parseargs(argc,argv);
                     27: 
                     28:        cfile = fopen(INITFILE,"r");
                     29:        rdnetfile(cfile);
                     30:        fclose(cfile);
                     31:        err("remote %c local %c link %s inspeed %d outspeed %d length %d\n",
                     32:                remote,local,netd.dp_device,netd.dp_inspeed,
                     33:                netd.dp_outspeed,netd.dp_datasize);
                     34:        err("debug %d time %d count %d onlyuid %d usehispeed=%d hispeedlink='%s'\n",
                     35:                debugflg,netd.dp_atime, netd.dp_maxbread,netd.dp_onlyuid,
                     36:                netd.dp_usehispeed, netd.dp_hispeedlink);
                     37:        err("sendonly %c rcvonly %c pipesim %c\n",
                     38:                chfromf(netd.dp_sndorcv < 0),chfromf(netd.dp_sndorcv > 0),
                     39:                chfromf(netd.dp_pipesim));
                     40:        setup(netd.dp_device);
                     41:        timev = gettime();
                     42:        timei = timev >> 16;
                     43:        srand(timei);
                     44: }
                     45: /*
                     46: 
                     47: see comment in netdaemon.c about the arguments
                     48: 
                     49: */
                     50: parseargs(argc,argv)
                     51:   char **argv; {
                     52:        char stemp[30];
                     53:        remote = 0;
                     54:        while(argc > 1 && argv[1][0] == '-'){
                     55:                argc--; argv++;
                     56:                switch(argv[0][1]){
                     57:                case '8':
                     58:                        netd.dp_use8bit = 1;
                     59:                        break;
                     60:                case 'd':
                     61:                        debugflg = 1;
                     62:                        break;
                     63:                case 'h':
                     64:                        netd.dp_usehispeed = 1;
                     65:                        break;
                     66:                case 'm':
                     67:                        harg(stemp,&argc,&argv);
                     68:                        remote = lookup(stemp);
                     69:                        break;
                     70:                case 'o':               /* only */
                     71:                        if(argv[0][2] == 's')           /* only send */
                     72:                                netd.dp_sndorcv = -1;
                     73:                        else if(argv[0][2] == 'r')      /* only receive */
                     74:                                netd.dp_sndorcv = 1;
                     75:                        else if(argv[0][2] == 'u')      /* only uid num */
                     76:                                netd.dp_onlyuid = atoi(argv[1]);
                     77:                        break;
                     78:                case 'p':
                     79:                        harg(stemp,&argc,&argv);
                     80:                        netd.dp_datasize = atol(stemp);
                     81:                        break;
                     82:                case 'r':
                     83:                        harg(stemp,&argc,&argv);
                     84:                        netd.dp_rdfile = fdopen(atoi(stemp),"r");
                     85:                        netd.dp_pipesim++;
                     86:                        break;
                     87:                case 'w':
                     88:                        harg(stemp,&argc,&argv);
                     89:                        netd.dp_pwritefd = atoi(stemp);
                     90:                        netd.dp_pipesim++;
                     91:                        break;
                     92:                /* ignore unknown options */
                     93:                }
                     94:        }
                     95:        if(remote == 0){
                     96:                fprintf(stderr,"Error- must specify machine - use -m option\n");
                     97:                exit(EX_USAGE);
                     98:        }
                     99: }
                    100: /*
                    101:        set the correct mode on the link device
                    102: */
                    103: setup(str)
                    104:   char *str; {
                    105:        struct sgttyb stt;
                    106: # ifdef RAND
                    107:        struct {
                    108:                int     t_xflags;
                    109:                char    t_col;
                    110:                char    t_delct;
                    111:                char    t_outqc_cc;
                    112:                char    t_rawqc_cc;
                    113:        } exstt;
                    114: #define OUT8BIT 01              /* All 8 bits on output */
                    115: #define IN8BIT  02              /* All 8 bits on input  */
                    116: # endif
                    117: 
                    118:        initseqno();
                    119:        /* nothing to set up if we're simulating with pipes */
                    120:        if(netd.dp_pipesim)return;
                    121: 
                    122:        if(netd.dp_usehispeed){
                    123:                str = netd.dp_hispeedlink;
                    124:                netd.dp_datasize = SENDLEN - ACKLENGTH;
                    125:                }
                    126:        if(str == 0 || str[0] == 0){
                    127:                err("invalid net device\n");
                    128:                exit(EX_OSFILE);
                    129:                }
                    130:        netd.dp_linefd = open(str,2);
                    131:        if(netd.dp_linefd < 0){
                    132:                perror(str);
                    133:                exit(EX_OSERR);
                    134:                }
                    135:        /* set exclusive use for line */
                    136:        if(ioctl(netd.dp_linefd,TIOCEXCL,&stt) != 0 ||
                    137:                gtty(netd.dp_linefd,&stt) < 0){
                    138:                perror(str);
                    139:                exit(EX_OSERR);
                    140:                }
                    141:        stt.sg_ispeed = netd.dp_inspeed;        /* user set baud */
                    142:        stt.sg_ospeed = netd.dp_outspeed;       /* user-set baud */
                    143:        stt.sg_erase = stt.sg_kill = 0;         /* erase and kill off */
                    144:        stt.sg_flags = ANYP;    /* even and odd parity, off everything else */
                    145:        if(stty(netd.dp_linefd,&stt) < 0){
                    146:                perror(str);
                    147:                exit(EX_OSERR);
                    148:                }
                    149: # ifdef RAND
                    150:        /* set device into 8-bit mode */
                    151:        if(gtty((2<<8)|netd.dp_linefd,&exstt) < 0){
                    152:                perror(str);
                    153:                exit(EX_OSERR);
                    154:                }
                    155:        exstt.t_xflags = OUT8BIT | IN8BIT;
                    156:        if(stty((2<<8)|netd.dp_linefd, &exstt) < 0){
                    157:                perror(str);
                    158:                exit(EX_OSERR);
                    159:                }
                    160: # endif
                    161:        /* set my own line discipline */
                    162:        /* NETLDISC is defined in sgtty.h on the CSVAX */
                    163:        /* setting the line discipline must be done AFTER the sttys */
                    164: # ifdef NETLDISC
                    165:        netd.dp_linedis = NETLDISC;
                    166:        if(ioctl(netd.dp_linefd,TIOCSETD,&netd.dp_linedis) != 0){
                    167:                printf("error - line discipline\n");
                    168:                perror(str);
                    169:                printf("proceeding...\n");
                    170:                netd.dp_linedis = 0;
                    171:                }
                    172:        if(netd.dp_linedis){
                    173:                /* set the line into RAW mode */
                    174:                netd.dp_linedis = 0;
                    175:                ioctl(netd.dp_linefd,TIOCSETD,&netd.dp_linedis);
                    176:                netd.dp_linedis = NETLDISC;
                    177:                stt.sg_ispeed = netd.dp_inspeed;        /* user set baud */
                    178:                stt.sg_ospeed = netd.dp_outspeed;       /* user-set baud */
                    179:                stt.sg_erase = stt.sg_kill = 0;         
                    180:                stt.sg_flags = ANYP|RAW;        /* in raw mode */
                    181:                if(stty(netd.dp_linefd,&stt) < 0){
                    182:                        perror(str);
                    183:                        exit(EX_OSERR);
                    184:                        }
                    185:                ioctl(netd.dp_linefd,TIOCSETD,&netd.dp_linedis);
                    186:                }
                    187: # endif
                    188:        }
                    189: /*VARARGS0*/
                    190: error(s,a,b,c,d,e,f,g,h)
                    191: char *s; {
                    192:        char buf[10];
                    193:        if(remote != 0) sprintf(buf,"%s",longname(remote));
                    194:        else buf[0] = 0;
                    195:        fflush(stdout);
                    196:        if(debugflg){
                    197:                fprintf(stderr,s,a,b,c,d,e,f,g,h);
                    198:                putc('\n',stderr);
                    199:                }
                    200:        addtolog(remote,"Err %s: ",buf);
                    201:        addtolog(remote,s,a,b,c,d,e,f,g,h);
                    202:        addtolog(remote,"\n");
                    203:        }
                    204: /* this is really not right - we should use the rcslog format */
                    205: /* also, the user must be able to write on the
                    206:    public logfile to get error messages such as
                    207:    directory not found after he has
                    208:    setuid'd from root
                    209: */
                    210: /*VARARGS0*/
                    211: addtolog(mach,s,a,b,c,d,e,f,g,h,i,j,k,l,m,n)
                    212: char *s;
                    213: {
                    214:        static FILE *log = NULL;
                    215:        struct stat statbuf;
                    216:        logfile[strlen(logfile)-1] = mach;
                    217:        if(log == NULL){
                    218:                if(stat(logfile,&statbuf) < 0)return;
                    219:                log = fopen(logfile,"a");
                    220:                }
                    221:        if(log == NULL)return;
                    222:        fseek(log,0L,2);
                    223:        fprintf(log,s,a,b,c,d,e,f,g,h,i,j,k,l,m,n);
                    224:        fflush(log);
                    225:        debug(s,a,b,c,d,e,f,g,h,i,h,k,l,m,n);
                    226:        }

unix.superglobalmegacorp.com

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