详细设计说明书示例 下载本文

3.2.4.3.5 int deltdb(struct tdb *tdbp) 目的: 删除某个指定的tdb块。 参数:

tdbp ―― 要删除的tdb块

返回值: 0 ―― 成功,非0值―― 失败 算法描述:

判断tdbp的有效性,若无效,则返回失败信息; 计算hashval值;

根据hashval找到tdbp,并删除它,若失败,返回错误。 3.2.4.3.6 int deltdbchain(struct tdb *tdbp) 目的: 删除整个tdbp链。 参数:

tdbp ―― 要删除的tdb链

返回值: 0 ―― 成功,非0值―― 失败 算法描述:

判断tdbp是否有效,若无效,返回错误信息; 将tdbp移至最后的tdbp->tdb_onext; 删除所有的tdb块。

3.2.4.3.7 int ipsec_tdbwipe(struct tdb *tdbp) 目的: 将指定tdb块中的所有值清空。 参数:

tdbp ―― 要清空的tdb块

返回值: 0 ――成功,非0值―― 失败 算法描述: 将所有值置为NULL。

3.2.5安全策略数据库的管理模块

3.2.5.1概要说明 3.2.5.1.1功能

实现了对SPD数据库的初始化,添加、删除eroute。 3.2.5.1.2组成文件

radij.c, ipsec_radij.c

3.2.5.2变量说明 3.2.5.2.1 eroute struct eroute {

struct rjtentry er_rjt; struct sa_id er_said;

struct sockaddr_encap er_eaddr; struct sockaddr_encap er_emask; };

3.2.5.3函数说明

3.2.5.3.1 int ipsec_radijinit(void) 目的: 初始化radij树 参数:

返回值: 0 ―― 成功,非0值―― 失败 算法描述:调用rj_init()函数初始化。 3.2.5.3.2 int

ipsec_makeroute(struct

sockaddr_encap

*eaddr,

struct

sockaddr_encap *emask, struct sa_id said) 目的: 根据said值,生成新的eroute项。 参数:

eaddr ―― 封装的有效目的地址, emask ―― 封装的目的地址掩码, said ―― 传入的said值

返回值: 0 ――成功,非0值―― 失败 算法描述:

分配eroute空间――retrt,并先清0;

给retrt赋值:retrt->er_eaddr = *eaddr; retrt->er_emask = *emask; retrt->er_said = said;

给eroute表加锁;

调用函数rj_addroute(&(retrt->er_eaddr), &(retrt->er_emask), rnh,

retrt->er_rjt.rd_nodes),向eroute表中加入新生成的该项;

解锁,返回。

3.2.5.3.3 int ipsec_breakroute(struct sockaddr_encap *eaddr, struct

sockaddr_encap *emask) 目的: 删除指定的route。 参数:

eaddr ―― 有效目的地址,emask - 目的地址的掩码

返回值: 0 ―― 成功,非0值―― 失败 算法描述:

锁住eroute表;

调用函数rj_delete(eaddr, emask, rnh, &rn)删除这个指定route; 解锁,将该route项清0,调用系统调用kfree释放该空间。

3.2.5.3.4 struct eroute *ipsec_findroute(struct sockaddr_encap *eaddr) 目的: 接收并处理ipsec数据包。 参数:

eaddr ―― 要查找的route所具有的eaddr值

返回值: struct eroute ―― 找到的eroute值,NULL ―― 未找到 算法描述:

调用函数rj_match((caddr_t)eaddr, rnh),根据eaddr查找相应的eroute项;

返回找到的eroute项。

3.2.5.3.5 int ipsec_cleareroutes(void) 目的: 清空eroute表。 参数:

返回值: 0 ―― 成功,非0值―― 失败

算法描述:首先,锁住eroute表;调用函数radijcleartree()函数;解锁,返回。 3.2.5.3.6 int ipsec_radijcleanup(void) 目的: 参数:

返回值: 0 ―― 成功,非0值―― 失败

算法描述:首先,锁住eroute表;调用函数radijcleanup()函数;解锁,返回。

3.3密钥协商及管理模块

3.3.1 概要说明

3.3.1.1 功能

前面所描述的KLIPS模块,基本完成了对输入、输出数据包的加密、认证工作,但其前提是处理数据包的SA已经协商完毕,而这个SA的协商工作正是由IKE所负责的。在本程序中,Pluto模块是IKE的一个实现,它可以自动完成两个主机或网关间的安全联盟的协商工作。