摘要: 在main函数中,有一行, clear_nat_hack_flags(svr); 在cfg_file.y中定义, /* Clear the VTUN_NAT_HACK flag which are not relevant to the current operation mode */inline void clear_nat_hack_flags(int svr){ if (svr) llis... 阅读全文
posted @ 2012-09-26 15:36 helloweworld 阅读(549) 评论(0) 推荐(0) 编辑
摘要: dpkg –L *** root@ubuntu:~# dpkg -L vtun/./usr/usr/sbin/usr/sbin/vtund/usr/share/usr/share/lintian/usr/share/lintian/overrides/usr/share/lintian/overrides/vtun/usr/share/man/usr/share/man/man8/usr/shar... 阅读全文
posted @ 2012-09-26 10:12 helloweworld 阅读(312) 评论(0) 推荐(0) 编辑
摘要: 声明:转载注明出处! 注: 1、 PID文件 the pid files contains the process id (a number) of a given program. For example, Apache HTTPD may write it's main process number to a pid file - which is a regular text file,... 阅读全文
posted @ 2012-09-25 21:23 helloweworld 阅读(342) 评论(0) 推荐(0) 编辑
摘要: 头文件:#include <unistd.h>int dup(int fd);int dup(int fd1,int fd2);功能:复制一个现存的文件描述符,返回新的文件描述符。返回值,成功返回新的文件描述符,出错返回-1.由dup返回的新文件描述符一定是当前可用文件描述中的最小数值。用dup2则可以用fd2参数指定新的描述符数值。如果fd2已经打开,则先关闭。若fd1=fd2,则dup2返回fd2,而不关闭它。通常使用这两个系统调用来重定向一个打开的文件描述符。 阅读全文
posted @ 2012-09-25 11:04 helloweworld 阅读(311) 评论(0) 推荐(0) 编辑
摘要: 头文件:#include<unistd.h>#include<sys/types.h>原型:pid_t fork( void);返回值:若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1.功能:一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。fork函数被调用一次但返回两次。两次返回的唯一区别是子进程中返回0值而父进程中返回子进程ID。举例1234567891011121314151617181920212223#include<sys/types.h>//对于 阅读全文
posted @ 2012-09-25 10:57 helloweworld 阅读(341) 评论(0) 推荐(0) 编辑
摘要: 上一篇分析了linkfd.c的lfd_linker()函数中的while在不考虑信号中断的情况下一直在执行(执行的是虚拟网卡的读写和数据的发送接收)。 而决定是否一直循环执行的linker_term变量被信号处理函数改变了,下面分析linker_term在哪些信号处理函数中被改变了,以及信号处理函数在干嘛。 在linkfd.c中, /* Termination flag */ static voi... 阅读全文
posted @ 2012-09-24 21:43 helloweworld 阅读(412) 评论(0) 推荐(0) 编辑
摘要: 头文件:#include <signal.h>原型:int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);参数:signum是除了SIGKILL和SIGSTOP之外的任何信号;act非空,新的动作(信号到来时执行的函数)存在act中,如果旧的动作非空,旧动作存在oldact中;返回值:sigaction() returns 0 on success and -1 on error.sigaction结构体如下:struct sigaction { void (*sa_hand 阅读全文
posted @ 2012-09-24 15:19 helloweworld 阅读(841) 评论(0) 推荐(0) 编辑
摘要: 在文件linkfd.c文件中,有从虚拟网卡读出数据然后发送,将接收到的数据写入网卡过程。 注意,在client和server端,上面的两个过程都有,意思可以说是两端对等,看下图。 下面分析对虚拟网卡的读写非阻塞问题,在linkfd.c的lfd_linker函数中,(client和server都是用该函数完成对虚拟网卡的读写)。 主要是下面代码: while( !linker_term )//w... 阅读全文
posted @ 2012-09-24 11:38 helloweworld 阅读(449) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2012-09-24 10:16 helloweworld 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 下面分析使用UDP封装数据包发送流程,从udp的socket创建开始分析, client中调用tunnel函数,tunnel中调用linkfd完成数据的发送。 发送数据流程都在linkfd.c中,这里的发送指的是从虚拟网卡读出数据,作为新建socket的数据部分发送。 linkfd函数中调用lfd_linker函数,其中有数据包的发送函数, if( len && proto_write(fd1, out, len) < 0 ) 那么建立数据包的和连接的过程在哪里?这就要分析fd1了, 下面分析fd1, int fd1 = lfd_host->rmt_fd; 找lfd 阅读全文
posted @ 2012-09-23 22:29 helloweworld 阅读(393) 评论(0) 推荐(0) 编辑