Beispiel #1
0
/*-----------------------------------------------------------------------------------*/
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);
}