Linu内核中的IPSEC实现.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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

文档评论(0)

hao187 + 关注
官方认证
文档贡献者

该用户很懒,什么也没介绍

认证主体武汉豪锦宏商务信息咨询服务有限公司
IP属地上海
统一社会信用代码/组织机构代码
91420100MA4F3KHG8Q

1亿VIP精品文档

相关文档