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