/*-----------------------------------------------------------------------------------*/ int main(int argc, char **argv) { int tunfd, infd, outfd, maxfd; int ret; fd_set fdset; infd = STDIN_FILENO; outfd = STDOUT_FILENO; fprintf(stderr, "tunslip started...\n"); tunfd = open("/dev/tun0", O_RDWR); if(tunfd == -1) { perror("main: open"); exit(1); } fprintf(stderr, "opened device...\n"); #ifdef linux system("ifconfig tun0 inet 192.168.0.2 192.168.0.1"); system("route add -net 192.168.0.0 netmask 255.255.255.0 dev tun0"); #else /* system("ifconfig tun0 inet sidewalker rallarsnus"); */ system("ifconfig tun0 inet 192.168.0.1 192.168.0.2"); #endif /* linux */ fprintf(stderr, "configured interface...\n"); while(1) { maxfd = 0; FD_ZERO(&fdset); FD_SET(infd, &fdset); if(infd > maxfd) maxfd = infd; FD_SET(outfd, &fdset); if(outfd > maxfd) maxfd = outfd; FD_SET(tunfd, &fdset); if(tunfd > maxfd) maxfd = tunfd; ret = select(maxfd + 1, &fdset, NULL, NULL, NULL); if(ret == -1) { perror("select"); exit(0); } else if(ret > 0) { if(FD_ISSET(infd, &fdset)) { do_slip(infd, tunfd); } else if(FD_ISSET(tunfd, &fdset)) { do_tun(tunfd, outfd); } else { exit(0); } } else { exit(0); } } }
int main(int argc, char **argv) { extern char *__progname; int ret, c; ret = 0; while ((c = getopt(argc, argv, "fFlpPrstT")) != -1) { switch (c) { case 'f': ret |= check_inheritance(); break; case 'F': ret |= do_fdpass(); break; case 'l': ret |= do_flock(); break; case 'p': ret |= do_pipe(); break; case 'P': ret |= do_process(); break; case 'r': ret |= do_random(); break; case 's': ret |= do_signal(); break; case 't': ret |= do_tun(); break; case 'T': ret |= do_pty(); break; default: fprintf(stderr, "Usage: %s -[fPprTt]\n", __progname); exit(1); } } return (ret); }