xl2tpd源码分析
1.软件版本:
xl2tpd-devel-20151125.tar.gz
2.源码框架:
3.源码详解:
xl2tpd源码的主函数非常简洁,具体代码如下:
File:xl2tpd.c --------------------------------------------------------------------------------------- int main (int argc, char *argv[]) { init(argc,argv); #NOTE:主要用于处理参数解析和配置文件解析 dial_no_tmp = calloc (128, sizeof (char)); network_thread (); return 0; } |
在查看参数解析之前,我们先看看该应用程序的帮助:
# xl2tpd --help xl2tpd version: xl2tpd-1.3.6 Usage: xl2tpd [-c configfile ] [-s secrec_file] [-p pid_file] [-C control_file] [-D] [-l] [-v, --version] |
在分析源码之前,我们首先了解相关配置的数据结构。对xl2tpd而言,配置数据结构分为3部分,LNS配置,LAC配置,GLOBAL配置。
这些配置分别对应一个数据结构:
File: file.h ------------------------------------------------------------------------------------- struct global { unsigned int listenaddr; /* IP address to bind to */ int port; /* Port number to listen to */ char authfile[STRLEN]; /* File containing authentication info */ char altauthfile[STRLEN]; /* File containing authentication info */ char configfile[STRLEN]; /* File containing configuration info */ char altconfigfile[STRLEN]; /* File containing configuration info */ char pidfile[STRLEN]; /* File containing the pid number*/ char controlfile[STRLEN]; /* Control file name (named pipe) */ int daemon; /* Use daemon mode? */ int syslog; /* Use syslog for logging? */ int accesscontrol; /* Use access control? */ int forceuserspace; /* Force userspace? */ int packet_dump; /* Dump (print) all packets? */ int debug_avp; /* Print AVP debugging info? */ int debug_network; /* Print network debugging info? */ int debug_tunnel; /* Print tunnel debugging info? */ int debug_state; /* Print FSM debugging info? */ int ipsecsaref; int sarefnum; /* Value of IPSEC_REFINFO used by kernel (we used to pick 22, but 2.6.36+ took that, so now we pick 30) * Changed in SAref patch in openswan 2.6.36 for linux 2.6.36+ */ }; struct lns struct lac |
init()参数及配置解析具体源码如下:
File: xl2tpd.c ----------------------------------------------------------------------------------------- void init (int argc,char *argv[]) { struct lac *lac; struct in_addr listenaddr; struct utsname uts; init_args (argc,argv); #NOTE:命令行参数初始化 if (gconfig.daemon) consider_pidfile(); signal (SIGTERM, &sigterm_handler); unlink(gconfig.controlfile); open_controlfd(); |
xl2tpd中调用函数init_args()来解析和处理命令行参数,其具体源码如下:
File:xl2tpd.c ------------------------------------------------------------------------------------------- void init_args(int argc, char *argv[]) { int i=0; gconfig.daemon=1; #NOTE: 以damon模式运行 for (i = 1; i < argc; i++) { if(! strncmp(argv[i],"-c",2)) { /* |
xl2tpd中对配置文件的解释调用函数init_config()来完成,该函数原型如下:
File: file.c ---------------------------------------------------------------------------------------------------------------- int init_config () { FILE *f; int returnedValue; gconfig.port = UDP_LISTEN_PORT; #NOTE: #define UDP_LISTEN_PORT 1701 l2ttp.h f = fopen (gconfig.configfile, "r"); } |
xl2tpd源码分析相关推荐
- 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析
目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...
- SpringBoot-web开发(四): SpringMVC的拓展、接管(源码分析)
[SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) SpringBoot-web开发(二): 页面和图标定制(源码分析) SpringBo ...
- SpringBoot-web开发(二): 页面和图标定制(源码分析)
[SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) 目录 一.首页 1. 源码分析 2. 访问首页测试 二.动态页面 1. 动态资源目录t ...
- SpringBoot-web开发(一): 静态资源的导入(源码分析)
目录 方式一:通过WebJars 1. 什么是webjars? 2. webjars的使用 3. webjars结构 4. 解析源码 5. 测试访问 方式二:放入静态资源目录 1. 源码分析 2. 测 ...
- Yolov3Yolov4网络结构与源码分析
Yolov3&Yolov4网络结构与源码分析 从2018年Yolov3年提出的两年后,在原作者声名放弃更新Yolo算法后,俄罗斯的Alexey大神扛起了Yolov4的大旗. 文章目录 论文汇总 ...
- ViewGroup的Touch事件分发(源码分析)
Android中Touch事件的分发又分为View和ViewGroup的事件分发,View的touch事件分发相对比较简单,可参考 View的Touch事件分发(一.初步了解) View的Touch事 ...
- View的Touch事件分发(二.源码分析)
Android中Touch事件的分发又分为View和ViewGroup的事件分发,先来看简单的View的touch事件分发. 主要分析View的dispatchTouchEvent()方法和onTou ...
- MyBatis原理分析之四:一次SQL查询的源码分析
上回我们讲到Mybatis加载相关的配置文件进行初始化,这回我们讲一下一次SQL查询怎么进行的. 准备工作 Mybatis完成一次SQL查询需要使用的代码如下: Java代码 String res ...
- [转]slf4j + log4j原理实现及源码分析
slf4j + log4j原理实现及源码分析 转载于:https://www.cnblogs.com/jasonzeng888/p/6051080.html
- Spark源码分析之七:Task运行(一)
在Task调度相关的两篇文章<Spark源码分析之五:Task调度(一)>与<Spark源码分析之六:Task调度(二)>中,我们大致了解了Task调度相关的主要逻辑,并且在T ...
最新文章
- 使用createrepo自建yum源
- Java 14 可能带来什么新特性?
- C语言/C++中怎么表示8进制数或者16进制数?(8进制数用数字0开头,16进制数用0x或者0X开头)
- Quartz.NET总结(四)Quartz 远程调度
- [深度学习] DeepFM 介绍与Pytorch代码解释
- 网络第八和九章要点总结
- 人人都可做 AI 开发者,云知声 AI 开放平台重磅上线
- jeecms 数据被引用,不能删除。解决办法
- c语言规定学号长度,c语言第1-9章基本概念练习题ans(最全).docx
- 可道云 docker 群晖_利用群晖NAS同步文献
- XMLSpy使用流程
- 谷歌地图api根据经纬度查询地名php,在线查询经纬度 google map查询地名返回经纬度 geocode geocoder的完整实例 代码下载...
- 生活技巧:过日子学着点
- Python-Django毕业设计钓鱼爱好者交流平台(程序+Lw)
- UNIX 进程揭秘--进程的生命周期
- dxf怎么用cad打开?CAD技巧分享
- 三轴机械手结构化编程5轴伺服项目
- mysql区间算法_「五大常用算法」一文图解分治算法和思想
- shell 抓取页面信息 ip168查询 IP归属地
- UVA11400(dp)
热门文章
- excel导入数据库的两种方式(js前端+C#后台)
- Xcode断点调试技巧
- 发改委:大多数城市已经放开放宽落户限制
- Elasticsearch8.1基于CentOS7.9的单机安装
- java.io.EOFException: SSL peer shut down incorrectly jdk1.8不支持TSLv1.3问题解决
- C# .aspx网页获取RFID读卡器HTTP协议提交的访问文件Request获得卡号、机号,Response回应驱动读卡器显示响声
- mysql 编译 性能_Icc编译MySQL性能调研
- php 修改某个字段的值,如何修改数据库表中的某一个字段的值呢?
- C#程序保存dump文件
- matlab 时间坐标轴,科学网-matlab作图——横坐标为时间轴的二维图-李娜娜的博文...