详细设计说明书示例Word格式.docx
- 文档编号:15066085
- 上传时间:2022-10-27
- 格式:DOCX
- 页数:80
- 大小:144.96KB
详细设计说明书示例Word格式.docx
《详细设计说明书示例Word格式.docx》由会员分享,可在线阅读,更多相关《详细设计说明书示例Word格式.docx(80页珍藏版)》请在冰豆网上搜索。
3.1源代码文件组成
本程序由两大模块组成,一部分是klips,它运行在操作系统内核空间,主要负责安全联盟和密钥的管理工作,以及对数据报的加密、解密的处理工作;
一部分是pluto,它是一个运行在用户空间的守护进程,主要负责安全联盟的协商工作。
下面分别是它们的文件组成:
源文件目录
|―――freeswan
|――klips
|――libdes
|――pluto
|――utils
3.2KLIPS(内核IPsec)详细设计
--―――klipsipsec的核心实现模块
|――net
|――ipsec
|――ipsec_init.c登记模块,并初始化
|――ipsec_tunnel.数据包的处理并发送模块
|――ipsec_rcv.c数据包接收并处理模块
|――ipsec_xform.c管理SA的模块
|――ipsec_sha1.csha1实现模块,由sha1.c改编
|――ipsec_md5c.cmd5.c实现模块
|――ipcomp.c
|――radij.c路由表的radix数的实现模块
|――ipsec_radij.c对上个文件的改编
|――pfkey_v2.c实现PF_KEY2协议的模块
|――pfkey_v2_parser.c对上个文件的改编
|――sysctl_net_ipsec.c
|――eroute.c用户操作eroute表的模块
|――spi.c用户操作SA库的模块
|――spigrp.c同上
|――tncfg.c用户操作虚接口的模块
|――klipsdebug.c
3.2.1登记及初始化模块
3.2.1.1概要说明
3.2.1.1.1功能
向内核系统登记几个proc文件,以便于向内核空间中查询安全联盟和eoute表,以及虚接口的状况;
初始化SA数据库(tdb链);
初始化SPDB数据库(eroute表);
初始化pf_key(PF_KEY套接口);
3.2.1.1.2模块所涉及的文件
ipsec_init.c:
intipsec_init(void)
ipsec_xform.c:
intipsec_tdbinit(void)
ipsec_radij.c:
intipsec_radijinit(void)
pfkey_v2.c:
intpfkey_init(void)
3.2.1.2变量说明
3.2.1.2.1proc文件结构
将下列结构登记到内核系统中,则内核就可以通过proc文件系统向应用程序提供一个安全的界面来存取如SA、eroute表等资料。
structproc_dir_entryipsec_eroute;
structproc_dir_entryipsec_spi;
structproc_dir_entryipsec_spigrp;
structproc_dir_entryipsec_tncfg;
structproc_dir_entryipsec_spinew;
structproc_dir_entryipsec_klipsdebug;
3.2.1.2.2notifier_block结构
structnotifier_block结构是在include/linux/notifier.h里面的:
structnotifier_block
{
int(*notifier_call)(structnotifier_block*self,unsignedlong,void*);
structnotifier_block*next;
intpriority;
};
而register_netdevice_notifier函数在net/core/dev.c里面,是这样的:
intregister_netdevice_notifier(structnotifier_block*nb)
returnnotifier_chain_register(&
netdev_chain,nb);
}
而notifier_chain_register函数在include/linux/notifier.h里面,是这样的:
extern__inline__intnotifier_chain_register(
structnotifier_block**list,structnotifier_block*n)
while(*list)
if(n->
priority>
(*list)->
priority)
break;
list=&
((*list)->
next);
n->
next=*list;
*list=n;
return0;
显然就是根据每个block的优先级把这个block排列在一个block的链表里面,在notifier_chain_register函数里面我们可以发现这个链表是netdev_chain。
实际上这个链表的作用就是在每个interface打开,关闭状态改变或者外界调用相应的ioctl的时候通知这个链表上面的所有相关的设备,而每一个协议都调用register_netdevice_notifier注册了一个netdev_notifier的结构体,这样就可以在interface改变的时候得到通知了(通过调用每个notifier_call函数)。
3.2.1.2.3inet_protocol结构
structinet_protocolah_protocol=
ipsec_rcv,/*AHhandler,定义此协议处理函数*/
NULL,/*TUNNELerrorcontrol,错误处理函数*/
0,/*next*/
IPPROTO_AH,/*protocolID*/
0,/*copy*/
NULL,/*data*/
"
AH"
/*name*/
ipsec_rcv函数是用来接收数据的callback函数,第二个是错误处理函数,其它的copy是用来协议共享的,这个以后再说,data当然就是这个结构体的私有数据了。
structinet_protocolesp_protocol同上;
inet_add_protocol函数在net/ipv4/protocol.c里实现:
voidinet_add_protocol(structinet_protocol*prot)
unsignedcharhash;
structinet_protocol*p2;
hash=prot->
protocol&
(MAX_INET_PROTOS-1);
prot->
next=inet_protos[hash];
inet_protos[hash]=prot;
prot->
copy=0;
p2=(structinet_protocol*)prot->
next;
while(p2!
=NULL)
if(p2->
protocol==prot->
protocol)
copy=1;
p2=(structinet_protocol*)p2->
这个函数是生成了一个hash表,然后每个hash表项都是一个链表头,然后通过这个hash表加链表的方式访问每个协议结构体。
3.2.1.3函数说明
登记及初始化模块包括以下一些函数:
init_modules(),ipsec_init(),cleanup_module(),ipsec_cleanup(),
ipsec_eroute_get_info(),ipsec_spi_get_info(),ipsec_spigrp_get_info(),
ipsec_tncfg_get_info(),ipsec_version_get_info(),ipsec_spi_get_new()
3.2.1.3.1intinit_module(void)
目的:
装载ipsec时进行登记及初始化工作。
参数:
无
返回值:
0――初始化成功,非0值――初始化未成功
算法描述:
调用ipsec_init()。
3.2.1.3.2intcleanup_module(void)
卸载ipsec进行清除工作。
0――初始化成功,非0值――初始化未成功
调用ipsec_cleanup()。
3.2.1.3.3intipsec_int(void)
。
1.将定义好的几个proc_dir_entry结构注册到系统中,如:
proc_register(proc_net,&
ipsec_eroute);
/*PROC_FS_21*/或
proc_register_dynamic(&
proc_net,&
或
proc_net_create(“ipsec_eroute”,0,ipsec_eroute_get_info);
proc_register为系统调用,在fs/proc/root.c中实现,主要就是在proc_net对应的目录下面生成每个协议的子目录。
用户可以通过访问/proc/net目录下面的相应目录得到相关的资料。
2.调用ipsec_tdbinit()函数初始化SA数据库,此函数在ipsec_tdb.c文件中实现;
3.调用ipsec_radijinit()函数初始化SPD数据库,此函数在ipsec_radij.c文件中实现;
4.调用pfkey_init()函数初始化PFKEY,此函数在pfkey_v2.c文件中实现;
5.调用register_netdevice_notifier(&
ipsec_dev_notifier)函数向系统中注册已定义的ipsec_dev_notifier结构,register_netdevice_ntifier()为系统调用;
6.调用inet_add_protocol(&
esp_protocol)和inet_add_protocol(&
ah_protocol)函数向系统中注册ESP协议和AH协议,inet_add_protocol()为系统调用;
7.调用ipsec_tunnel_init_devices()函数,登记并初始化ipsec
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 详细 设计 说明书 示例
![提示](https://static.bdocx.com/images/bang_tan.gif)