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的一个实现,它可以自动完成两个主机或网关间的安全联盟的协商工作。