linux内核有哪些协议族,Linux内核中PF_KEY协议族的实现.doc

2023-11-12

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux内核有哪些协议族,Linux内核中PF_KEY协议族的实现.doc 的相关文章

  • 全国电赛K题江苏省二等奖----王澳刚

    2017年TI杯江苏省大学生电子设计大赛 题目 单相用电器分析监测装置 题目编号 K题 参赛队编号 ZJ022 参赛队学校 江苏科技大学 参赛队学生 王澳刚 雷松泽 匡正 指导老师 王宝忠 李垣江 二0一七年八月 摘 要 本系统以STM32
  • TCP:为什么是三次握手

    定义 HTTP是基于传输层的TCP协议 而TCP是一个端到端的面向连接的协议 所谓的端到端可以理解为进程到进程之间的通信 所以HTTP在开始传输之前 首先需要建立TCP连接 而TCP连接的过程需要所谓的 三次握手 在TCP三次握手之后 建立
  • C++从入门到放弃之:C++ 左值引用与右值引用详解

    C 从入门到放弃 C 引用 1 左值引用 2 万能引用 常引用 3 右值引用 4 引用型函数返回值 5 引用和指针 6 函数传参传递指针和引用的区别 总结 C 引用 1 左值引用 定义 引用即别名 某个变量的别名 对引用的操作就等同于对变量
  • idea导入java文件_怎么在idea中导入Java文件并运行文件

    怎么在idea中导入Java文件并运行文件 发布时间 2020 06 22 20 58 37 来源 亿速云 阅读 926 作者 元一 这篇文章将为大家详细讲解有关怎么在idea中导入Java文件并运行文件 小编觉得挺实用的 因此分享给大家做
  • Golang-循环变量作用域针对那些数据类型会出现问题

    一 原因 在 Go 中 循环变量的作用域是整个 for 循环语句块 因此 循环变量在 for 循环语句块中的代码都是可见的 但是 当循环变量的值被用于闭包 协程或者使用指针类型的数据结构时 会出现一些问题 这是因为循环变量的值在每一次迭代中
  • Add One

    Add One 题意 给一个数n 有m次操作 每次操作把n的每一位加一 例如1912操作一次后变成21023 问操作m次后 数字的位数 思路 可以初始化0 9每一个数字操作k次后的位数f i k k lt m 然后把n的每一位操作后的长度加
  • LeetCode-Python-1584. 连接所有点的最小费用(MST)

    给你一个points 数组 表示 2D 平面上的一些点 其中 points i xi yi 连接点 xi yi 和点 xj yj 的费用为它们之间的 曼哈顿距离 xi xj yi yj 其中 val 表示 val 的绝对值 请你返回将所有点
  • Java-网络编程

    网络通信 1 两台及以上设备之间通过网络实现数据传输 2 将数据通过网络从一台设备传送到另一台设备 3 java net包下提供了一系列的类或者接口使用来实现网络通信 网络 1 两台或者多台设备通过一定物理设备连接起来构成了网络 2 根据覆
  • 【Android】-- 编辑框EditText、焦点变更监视器、文本变化监视器

    一 编辑框EditText 编辑框用于接收键盘输入的文字 由文本视图派生而来 除了TextView已有的各种属性和方法 EditText还支持下列XML属性 inputType 指定输入的文本类型 输入类型的取值说明如下表 若同时使用多种文
  • GOTURN——Learning to Track at 100 FPS with Deep Regression Networks

    文章的题目叫 Learning to Track at 100 FPS with Deep Regression Networks 算法简称 GOTURN Generic Object Tracking Using Regression N
  • 在企业当中搭建samba服务器

    目录 项目简介 项目分析 项目实施 1 修改防火墙设置 2 安装samba并启动samba服务 3 建立共享目录 4 创建访问账号 5 修改配置文件 6 测试配置文件 7 测试Samba服务器 1 完成只有行政部的用户可以上传和删除comp
  • 判断字符串是否是正确的IP格式的C语言函数

    来自 http blog csdn net shanzhizi 一个用于识别字符串是否是IPV4的C语言函数 保留下来供大家参考使用 include
  • Unity-C#中关于时间戳的一些方法

    转自 http www narkii com club thread 367980 1 html
  • 【FPGA】RGMII接口

    目录 1 RGMII 接口概要 2 RGMII 接口介绍 2 1 MII接口 2 2 RMII接口 2 3 GMII接口 2 4 RGMII接口 1 RGMII 接口概要 以太网的通信离不开物理层 PHY 芯片的支持 以太网 MAC 和 P
  • linux中printf命令,总结linux下printf命令的用法

    printf format and print date 通过printf的选项格式化输出数据 基本英文学习 二进制 binanry number 八进制 otcal number 十进制 decimal number 十六进制 hexad
  • Codeforces Round #697 (Div. 3) C. Ball in Berland(1400)

    Codeforces 1475 C Ball in Berland 题目分析 这个题其实就是给你一堆坐标 让你找到合适的有多少对 思路分析 坐标的话 首先想到用 pair
  • SPSS语法的使用

    SPSS语法的使用 CDA数据分析师官网
  • drf小练习2

    目录 1 使用GenericAPIView写出book的5个接口 2 使用面向对象 写5个父类 继承GenericAPIView 某几个父类后 就有某几个接口 方法一 方法二 九个子类视图 方式一 方式二 1 使用GenericAPIVie
  • 图的表示形式:邻接矩阵和邻接表

    图是对象和对象之间存在的关系的有限集合 如果将对象表示为顶点 或节点 将关系表示为边 则可以得到以下两种图形 有向图 在有向图中 一条边由一对有序的顶点 i j 表示 其中边起源于顶点i并终止于顶点j 下面给出的是有向图的示例 图 D 1

随机推荐

  • 数学建模论文

    论文 一 首页 1 标题 2 摘要 2 1 摘要的开头段 2 2摘要的中间段 2 3 摘要的结尾段 2 4 摘要中常见的废话 一 问题重述 1 问题背景 1 2 问题提出 二 问题分析 三 模型假设 四 符号说明 五 模型的建立与求解 六
  • JavaScript设计模式——工厂模式

    作者 Hanpeng Chen 公众号 前端极客技术 文章首发个人博客 JavaScript设计模式 工厂模式 代码视界 在瞬息万变的前端领域 技术更新迭代非常快 我们经常能在网络上看到诸如 学不动了 之类的言论 但是作为一名前端开发工程师
  • oracle实例名,服务名等概念区别与联系

    数据库名 实例名 数据库域名 全局数据库名 服务名 这是几个令很多初学者容易混淆的概念 相信很多初学者都与我一样被标题上这些个概念搞得一头雾水 我们现在就来把它们弄个明白 一 数据库名 什么是数据库名 数据库名就是一个数据库的标识 就像人的
  • HTML+css网页设计

    HTML 超文本标记语言 和CSS 层叠样式表 是用于网页设计的关键技术 下面是一个简单的示例 展示如何使用HTML和CSS创建一个基本的网页设计 首先 我们需要创建一个HTML文件 并使用标签将内容包裹起来 在标签中 我们可以添加一些元数
  • org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request

    前段时间在开发Spring Boot项目时 遇到了一个很烦人的错误 提示为 org springframework web multipart MultipartException Failed to parse multipart ser
  • 测试人的职场之路,进阶提升?测试老鸟经验分享...

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • linux 系统 ES开源工具 elastichd 的使用

    要求安装了 ES和 docker 执行命令 docker run p 9800 9800 d containerize elastichd 然后访问 主机名 9800 即可 打开之后是这样一个界面
  • Win10子系统Ubuntu的WSL2开启、图形界面安装以及CUDA配置

    文章目录 一 Win10开启Linux子系统 操作步骤 1 启用适用于 Linux 的 Windows 子系统 2 检查运行 WSL 2 的要求 3 启用虚拟机功能 4 下载 Linux 内核更新包 5 将 WSL 2 设置为默认版本 6
  • 使用公网IP的ubuntu移植QT运行用QT编写的服务器

    下面是ubuntu下移植Qt 将编好的可执行程序放在另一台主机 然后将Qt的库转移到这台主机上来 设置环境变量后 重启 可以运行qt可执行程序 export LD LIBRARY PATH opt Qt lib LD LIBRARY PAT
  • Extjs 双击关闭tab页

    var tab new Ext TabPanel region center deferredRender false activeTab 0 resizeTabs true turn on tab resizing minTabWidth
  • vue番茄钟 & electron打包

    序 平时对自己学习工作计划安排可以使用番茄钟去规划 番茄钟 一个很简单的时间管理方法 设置一个固定时间 根据自己情况调整 这个时间是一个倒计时 在这段时间内认真去做一件事情 然后一个番茄钟结束后 休息大概五分钟 重新番茄钟 这可以帮助我们量
  • Python正则速查

    Python正则速查 特殊情况 special characters match a literal backslash r Python s raw string notation for regular expression patte
  • elasticSearch - es报错:exception [type=search_phase_execution_exception, reason=all shards failed]

    背景 在做es聚合查询时 遇到了如下问题 exception type search phase execution exception reason all shards failed 结论 查询语句中 字段类型使用错误 在es中查询字段
  • Spark学生答题情况分析

    目录 1 流程分析 2 业务模块划分 3 创建模块包结构 4 准备Kafka主题 4 1 测试发送数据到Kafka 5 需求 5 1 代码实现 6 需求 6 1 准备模型 直接训练并使用 6 2 代码实现 7 学生答题情况离线分析 7 1
  • 《数据结构与算法》——顺序表元素的插入

    撰写时间 2020 5 18 数据结构与算法 顺序表元素的插入 首先来了解的线性表有两种存储方式一种是顺序表的形式语种列表的形式顺序表最大的特点 他的元素按顺序存放地址连续 来看一下这个插入数据元素的方法图 代表L这一个 想在i这个位置插入
  • 网上手机订货软件源码定制搭建

    企业订货管理系统介绍 一 什么是订货通 什么是企业订货管理系统 是一款针对中小型企业通过网络实现 厂家和客户 经销商 批发商 代理商一站式订货系统 最终实现厂家的下游客户通过网络实现实时订货功能 二 订货通能做什么 订货通可帮助企业实现下游
  • redis数据备份

    一 RDB 详解 RDB 是 Redis 默认的持久化方案 就是在配置文件里面设置多久时间之内 执行了多少次写操作 就生成一份数据快照dump rdb文件 备份到指定是目录下 redis conf 文件 以上就是900秒内写操作执行了1次
  • 数学期望(离散型和连续型)

    数学期望的定义 数学期望的计算公式 例题 1 数学期望的定义 在概率论和统计学中 数学期望 或均值 是试验中每次可能结果的概率乘以其结果的总和 是最基本的数学特征之一 它反映随机变量平均取值的大小 随机变量包括离散型和连续型 数学期望的计算
  • 如何玩转kvm切换器

    KVM多电脑切换器适用对象涵盖SOHO 小型工作室 族群 中小型企业乃至于大型跨国企业 KVM多电脑切换器对于企业机房或数据中心的空间及信息环境能创造广大的效益 不仅能降低能源消耗 节省机架与机房空间 还能避免多余的键盘 显示器与鼠标所造成
  • linux内核有哪些协议族,Linux内核中PF_KEY协议族的实现.doc

    Linux内核中PF KEY协议族的实现 Linux内核中PF KEY协议族的实现 1 本文档的Copyleft归yfydz所有 使用GPL发布 可以自由拷贝 转载 转载时请保持文档的完整性 严禁用于任何商业用途 msn yfydz no1