- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux内核中的 IPSEC实现(2)
本文档的Copyleft归 yfydz所有,使用 GPL 发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。
msn: yfydz_no1@ 来源:
状态(xfrm_stat处e)理
本节所介绍的函数都在net/xfrm/xfrm_state中.c定义。
状态分配
状 态 分 配 函 数 为 xfrm_state_alloc(该), 函 数 被 pfkey_msg2xfrm_state(函) 数 调 用 ,
pfkey_msg2xfrm_state函()数是将标准的 pfkey_msg(SA结构)转换为 xfrm 状态, 同时该函数也被其他状态处理函数调用.
struct xfrm_state *xfrm_state_alloc(void)
{
struct xfrm_state *x;
// 分配空间
x = kzalloc(sizeof(struct xfrm_state), GFP_ATOMIC);
if (x) {
// 使用数初始化为 1
atomic_set(x-refcnt, 1);
// 被 0 个 ipsec通道使用
atomic_set(x-tunnel_users, 0);
// 初始化链表节点, 状态可按目的地址, 源地址和SPI挂接到不同链表INIT_HLIST_NODE(x-bydst);
INIT_HLIST_NODE(x-bysrc); INIT_HLIST_NODE(x-byspi);
// 状态定时器
init_timer(x-timer);
// 定时器处理函数
x-timer.function = xfrm_timer_handler; x-timer.data = (unsigned long)x;
// 回放检测定时器
init_timer(x-rtimer);
// 回放定时器处理函数
x-rtimer.function = xfrm_replay_timer_handler; x-rtimer.data = (unsigned long)x;
x-curlft.add_time = (unsigned long)xtime.tv_sec;
// SA生命期参数
x-lft.soft_byte_limit = XFRM_INF;
x-lft.soft_packet_limit = XFRM_INF; x-lft.hard_byte_limit = XFRM_INF;
x-lft.hard_packet_limit = XFRM_INF;
// 回放处理参数
x-replay_maxage = 0;
x-replay_maxdiff = 0;
// 初始化状态锁
spin_lock_init(x-lock);
}
return x;
}
EXPORT_SYMBOL(xfrm_state_alloc);
// 状态定时器超时处理函数
static void xfrm_timer_handler(unsigned long data)
{
struct xfrm_state *x = (struct xfrm_state*)data; unsigned long now = (unsigned long)xtime.tv_sec; long next = LONG_MAX;
int warn = 0;
spin_lock(x-lock);
// 如果该xfrm状态已经处于死亡状态, 可以返回了if (x-km.state == XFRM_STATE_DEAD)
goto out;
// 如果处于生命期到期状态, 转到期处理
if (x-km.state == XFRM_STATE_EXPIRED) goto expired;
// 如果到期了还要强制要增加一些时间
if (x-lft.hard_add_expires_seconds) {
// 计算强制增加的超时时间
long tmo = x-lft.hard_add_expires_seconds + x-curlft.add_time - now;
// 没法增加超时了, 到期
if (tmo = 0)
goto expired;
if (tmo next) next = tmo;
}
// 如果到期了还要强制要增加的使用时间
if (x-lft.hard_use_expires_seconds) {
// 计算强制增加的使用时间
long tmo = x-lft.hard_use_expires_seconds + (x-curlft.use_time ? : now) - now;
// 没法增加超时了, 到期
if (tmo = 0)
goto ex
您可能关注的文档
最近下载
- 日立牌SET-FREE AⅢ系列产品提案书20240628.docx VIP
- AquaECO特灵产品技术手册20231212.pdf VIP
- 中考语文成语易错48道选择题(有详细解析).pdf VIP
- 天津钢管集团股份有限公司.pdf VIP
- 海尔物联多联MAX样册2025-4-10.pdf VIP
- 2023年小升初语文专项练习《地名人名拼写规则》(含答案).docx VIP
- 辅警结构化面试题及答案(2025年.docx VIP
- SET-FREE AⅢ产品样册-日立.pdf VIP
- 105656-海尔智慧楼宇检测中心概况(实验室布局,测试能力范围,实验室介绍,数字化测试,实验室认证).docx VIP
- 井控考试试题库(DOC) .pdf VIP
文档评论(0)