- 1、本文档共36页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
freeradius学习文档
启动
freeradius驱动运行部分
/main/radiusd.c下radius_event_init函数中:
listen_init函数初始化rad_listen_t的数据结构
rad_event_init函数中调用event_new_fd将rad_listen_t链表对应的描述符依次插入到fr_event_list_t结构中,并且指定fr_event_fd_handler_t,并将rad_listen_t作为ctx放入结构中。
/main/radiusd.c下radius_event_process调用
fr_event_loop调用select监听所有文件描述符,发现描述符中有数据可以读取时,调用该套接口下对应的函数进行处理,即fr_event_fd_t下的handler字段。
fr_event_fd_handler_t使用执行上下文参数ctx从fd中取出数据,并且rad_listen_recv_t读取数据后,并且指定处理函数,所以不管是单线程还是线程池都能正常地工作。
typedef int (* rad_listen_recv_t)(rad_listen_t *, RAD_REQUEST_FUNP *, REQUEST **);
typedef int (*RAD_REQUEST_FUNP)(REQUEST *);
listener作为REQUEST的一个字段放入,在内存中找到client后,将client也作为一个字段放入REQUEST。
读取用户参数
/src/main/radiusd.c下main函数中
getopt(argc, argv, "Cd:fhi:l:mn:p:stvxX")函数接收用户参数进行相应的设置
getopt函数决定选项-d, -i, -n, -p后需要接入参数
具体选项:
-C
check_config设为TRUE
spaw_flag设为FALSE
dont_fork设为TRUE
该选项使radius在前台运行,不创建线程池,在读取完配置文件加载模块后结束
-d conf_dir
用conf_dir指向的内容,替换radius_dir中的内容
该选项指定配置文件所在的目录
-f
指定dont_fork为TRUE
改选项指定radius前台运行
-h
打印帮助消息,调用exit结束进程
-l log_file_name
在全局配置变量main_config中指定日志文件为log_file_name,当指定stdout时为标准输出,并试图打开文件,不能打开则退出程序。
-i hostip
在全局变量中指定main_config中指定radius所在机器的ip
-n conf_name
main_config中name字段默认为radiusd,该选项将那么重新指定为conf_name
-m
将全局变量debug_memory设定为1
-s
将spawn_flag设定为false,dont_fork设定为true,达到前台运行单进程下单线程效果
-t
将spawn_flag设定为false,不创建线程池后台启动
-v
输出freeradius的版本信息,调用exit退出进程
-X
spawn_flag设定为false,dont_fork设定为true,全局变量debug增加2(DEBUG2函数会向日志文件中输出),main_config中指定日志输出到stdtou中
-x
全局变量debug自增,和函数DEBUGX相对应,日志输出位置为默认位置,可以通过其他选项进行指定
-p port_number
mainconfig中指定port号为port_number
读取配置文件
组织形式
这里另外会形成一个单向链表和一颗树,每个子节点都知道自己的父节点,只有section节点可以作为父节点。
CONF_DATA主要用于防止配置重复加载
说明:
只有section节点才能衍生出子节点
CONF_ITEM为CONF系列的通用指针,便于组织数据结构,next和parent指针用于组织十字链表,lineno和filename用于读取配置失败时进行提示哪里出错,type用于指定CONF_ITEM被包含在什么类型中。
CONF_PAIR中attr为第一个token前面的内容,空格也被认为是token,但是oo xx会被认为是name1为oo,name2为xx的section,并且后面不带“{”会被认为是出错。oo为合法pair,token为T_OP_EQ,value为oo,结果为oo = NULL。具体可以查看cf_section_ read。
CONF_DATA中name和flag都由程序指定,flag取值:PW_TYPE_STRINT_PTR,
您可能关注的文档
- 《PE苄基化改性稻草复合材料力学性能研究 》.ppt
- 《PE基吹塑薄膜用途工艺配方设计》.ppt
- 《The toxicological study of tributyltin in Caenorhabditis elegans》.ppt
- 《桉树人工林对紫茎泽兰入侵种群的阻滞效应及其可能机制》.ppt
- 《柴河流域不同景观结构氮磷养分计量比变化特征及其流域污染防控》.ppt
- 《城市内河污染生态修复与水岸景观协调构建技术》.pptx
- 《地表臭氧浓度增加对我国亚热带典型树种的影响》.pptx
- 《滇池湖滨缓冲带及农田土壤无机磷分布特征及其淋失风险》.ppt
- 《滇中湖群山地富磷区植物群落叶片氮磷》.ppt
- 《典型纳米金属氧化物对植物 幼苗生长毒性效应的研究》.ppt
文档评论(0)