|
|
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.