|
|
1.1 ! root 1: #include <sys/ioctl.h> ! 2: #include <stdio.h> ! 3: ! 4: static char *names[] = { ! 5: "/dev/dk/dk0%c%d", ! 6: "/dev/dk/dk2%c%d", ! 7: "/dev/dk/dkctl0", ! 8: "/dev/dk/dkctl2", ! 9: "/dev/dk/dk%c%d", ! 10: "/dev/dk/dkctl", ! 11: 0 ! 12: }; ! 13: ! 14: static char *namefmt; ! 15: static char alph[] = "0123456789abcdefghijklmnopqrstuvwxyz"; ! 16: ! 17: /* ! 18: * open channel 1 to controller ! 19: * leave record of file name ! 20: */ ! 21: dkctlchan(traffic) ! 22: register traffic; ! 23: { ! 24: register i ; ! 25: extern int rdk_ld, dkp_ld ; ! 26: char dk01file[32]; ! 27: ! 28: namefmt = traffic? names[1]:names[0]; ! 29: sprintf(dk01file, namefmt, alph[0], 1); ! 30: i = open(dk01file, 2) ; ! 31: if (i < 0) { ! 32: sprintf(dk01file, traffic?names[3]:names[2]) ; ! 33: i = open(dk01file, 2) ; ! 34: if (i < 0) { ! 35: namefmt = names[4]; ! 36: sprintf(dk01file, namefmt, alph[0], 1); ! 37: i = open(dk01file, 2); ! 38: if (i < 0) { ! 39: sprintf(dk01file, names[5]) ; ! 40: i = open(dk01file, 2); ! 41: if (i < 0) ! 42: return (i) ; ! 43: } ! 44: } ! 45: } ! 46: ioctl(i, DIOCNXCL, 0); ! 47: if (ioctl(i, FIOLOOKLD, 0) != rdk_ld) { ! 48: if (dkproto(i, dkp_ld) < 0) { ! 49: fprintf(stderr, "can't start dkp on %s\n", dk01file) ; ! 50: close(i) ; ! 51: return (-1) ; ! 52: } ! 53: if (ioctl(i, FIOPUSHLD, &rdk_ld) < 0) { ! 54: fprintf(stderr, "can't push rdk_ld on %s\n", dk01file) ; ! 55: close(i) ; ! 56: return (-1) ; ! 57: } ! 58: if (ioctl(i, DIOCLHN, (char *)0) < 0) { ! 59: fprintf(stderr, "can't be manager on %s\n", dk01file) ; ! 60: close(i); ! 61: return(-1); ! 62: } ! 63: } ! 64: return (i) ; ! 65: } ! 66: ! 67: /* ! 68: * find the file name corresponding to a given channel. ! 69: * assumes dkctlchan has been called. ! 70: * Used for incoming calls. ! 71: */ ! 72: ! 73: char * ! 74: dkfilename(chan) ! 75: { ! 76: static char name[64]; ! 77: ! 78: if (namefmt==NULL) ! 79: return(NULL); ! 80: sprintf(name, namefmt, alph[chan/10], chan%10); ! 81: return(name); ! 82: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.