|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include <errno.h> ! 3: #include <signal.h> ! 4: #include <sys/param.h> ! 5: #include <sys/types.h> ! 6: #include <sgtty.h> ! 7: #include <sys/inet/in.h> ! 8: #include "config.h" ! 9: ! 10: #define RESETTIME 15*60 ! 11: ! 12: static char *cmdname; ! 13: static in_addr myaddr; ! 14: ! 15: catch_hup() ! 16: { ! 17: signal(SIGHUP, catch_hup); ! 18: } ! 19: ! 20: main(argc, argv) ! 21: char *argv[]; ! 22: { ! 23: int other_end, my_pid; ! 24: ! 25: cmdname = argv[0]; ! 26: switch(argc){ ! 27: case 3: ! 28: ipconfig(0, argv[1], argv[2]); ! 29: pause(); ! 30: break; ! 31: case 4: ! 32: my_pid = getpid(); ! 33: setpgrp(my_pid, my_pid); ! 34: signal(SIGHUP, catch_hup); ! 35: while(1) { ! 36: other_end = callup(argv[1], argv[3], argv[2]); ! 37: if (other_end < 0) { ! 38: fprintf(stderr, "%s: call failed\n", cmdname); ! 39: sleep(60); ! 40: continue; ! 41: } ! 42: if (ioctl(other_end, TIOCSPGRP, 0) < 0) { ! 43: fprintf(stderr, "%s: couldn't set pgrp\n", cmdname); ! 44: close(other_end); ! 45: sleep(60); ! 46: continue; ! 47: } ! 48: ipconfig(other_end, argv[2], argv[3]); ! 49: pause(); ! 50: close(other_end); ! 51: } ! 52: break; ! 53: default: ! 54: fprintf(stderr, "Usage: %s dk-address my-ip-addr his-ip-addr\n", ! 55: cmdname); ! 56: exit(1); ! 57: } ! 58: } ! 59: ! 60: static int ! 61: ipconfig(ipfd, me, it) ! 62: int ipfd; ! 63: char *me, *it; ! 64: { ! 65: in_addr hisaddr, inaddr; ! 66: int x; ! 67: ! 68: myaddr = in_address(me); ! 69: if(myaddr == 0){ ! 70: fprintf(stderr, "ipconfig: unknown host %s\n", me); ! 71: exit(1); ! 72: } ! 73: hisaddr = in_address(it); ! 74: if(hisaddr == 0){ ! 75: fprintf(stderr, "ipconfig: unknown host/net %s\n", it); ! 76: exit(1); ! 77: } ! 78: x = 10; /* IP line disc # */ ! 79: if(ioctl(ipfd, FIOPUSHLD, &x) < 0){ ! 80: perror("PUSHLD"); ! 81: exit(1); ! 82: } ! 83: if(ioctl(ipfd, IPIOLOCAL, &myaddr) < 0){ ! 84: perror("IPIOLOCAL"); ! 85: exit(1); ! 86: } ! 87: if(hisaddr & 0xff){ ! 88: ioctl(ipfd, IPIOHOST, &hisaddr); ! 89: } else { ! 90: ioctl(ipfd, IPIONET, &hisaddr); ! 91: } ! 92: } ! 93: ! 94: static int ! 95: callup(host, a1, a2) ! 96: char *host, *a1, *a2; ! 97: { ! 98: char cmd[512]; ! 99: ! 100: strcpy(cmd, DKIPCONFIG); ! 101: strcat(cmd, " "); ! 102: strcat(cmd, a1); ! 103: strcat(cmd, " "); ! 104: strcat(cmd, a2); ! 105: return(tdkexec(host, cmd)); ! 106: } ! 107: ! 108: static int ! 109: still_there(ipfd) ! 110: int ipfd; ! 111: { ! 112: return ioctl(ipfd, IPIOLOCAL, &myaddr) >= 0; ! 113: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.