Linux内核中PF_KEY协议族的实现.docVIP

  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内核中PF_KEY协议族的实现

Linux内核中PF_KEY协议族的实现(1) 本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。 msn: yfydz_no1@ 来源: 1. 前言 在Linux2.6内核中自带了PF_KEY协议族的实现,这样就不用象2.4那样打补丁来实现了。内核中PF_KEY实现要完成的功能是实现维护内核的安全联盟(SA)和安全策略(SP)数据库, 以及和用户空间的接口。 以下内核代码版本为, PF_KEY相关代码在net/key/目录下,定义了内核中PF_KEY与用户空间的接口,这个接口是RFC定义的,因此各种实现都基本类似;但具体关于SA和SP的内部的实现和管理则是与实现相关的,各种实现各自不同,在linux内核是使用xfrm库来实现的,代码在net/xfrm/目录下定义。 ? 2. 数据结构 关于SA和SP的数据结构已经在RFC2367中定义, 头文件为include/linux/pfkeyv2.h, 这些是用户空间和内核空间共享的,只是作为接口的数据结构;而内核中具体使用的数据结构为xfrm定义的结构,在include/net/xfrm.h中定义。 2.1 PF_KEY类型的sock struct pfkey_sock { ?/* struct sock must be the first member of struct pfkey_sock */ ?struct sock?sk; // 比普通sock添加两个参数 // 是否进行登记 ?int??registered; // 是否是混杂模式 ?int??promisc; }; 2.2 状态(SA) xfrm状态用来描述SA在内核中的具体实现: struct xfrm_state { ?/* Note: bydst is re-used during gc */ // 每个状态结构挂接到三个HASH链表中 ?struct hlist_node?bydst; // 按目的地址HASH ?struct hlist_node?bysrc; // 按源地址HASH ?struct hlist_node?byspi; // 按SPI值HASH ?atomic_t??refcnt; // 所有使用计数 ?spinlock_t??lock;?? // 状态锁 ?struct xfrm_id??id; // ID ?struct xfrm_selector?sel; // 状态选择子 ?u32???genid; ?/* Key manger bits */ ?struct { ??u8??state; ??u8??dying; ??u32??seq; ?} km; ?/* Parameters of this state. */ ?struct { ??u32??reqid; ??u8??mode; ??u8??replay_window; ??u8??aalgo, ealgo, calgo; ??u8??flags; ??u16??family; ??xfrm_address_t?saddr; ??int??header_len; ??int??trailer_len; ?} props; ?struct xfrm_lifetime_cfg lft; // 生存时间 ?/* Data for transformer */ ?struct xfrm_algo?*aalg; // hash算法 ?struct xfrm_algo?*ealg; // 加密算法 ?struct xfrm_algo?*calg; // 压缩算法 ?/* Data for encapsulator */ ?struct xfrm_encap_tmpl?*encap; // NAT-T封装信息 ?/* Data for care-of address */ ?xfrm_address_t?*coaddr; ?/* IPComp needs an IPIP tunnel for handling uncompressed packets */ ?struct xfrm_state?*tunnel; ?/* If a tunnel, number of users + 1 */ ?atomic_t??tunnel_users; ?/* State for replay detection */ ?struct xfrm_replay_state replay; ?/* Replay detection state at the time we sent the last notification */ ?struct xfrm_re

文档评论(0)

s4as2gs2cI + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档