首页 存档 技术 查看内容

Linux网络子系统安全性模块详细分析之文件xfrm_state.c文件介绍

2018-3-30 13:00 |来自: 互联网 417 0

摘要: 2.4.4 文件四 xfrm_state.c 2.4.4.1 文件描述 该文件的路径是linux-3.5.4/net/xfrm/xfrm_state.c。 该文件是IPsec的核心模块,主要提供SA的管理,诸如SA的分配、插入、查找、删除等操作,除此之处,还提供了审计功能 ...

2.4.4 文件四 xfrm_state.c

2.4.4.1 文件描述

该文件的路径是linux-3.5.4/net/xfrm/xfrm_state.c

该文件是IPsec的核心模块,主要提供SA的管理,诸如SA的分配、插入、查找、删除等操作,除此之处,还提供了审计功能。


2.4.4.2 主要变量及定义

#define XFRM_PROTO_ESP50//描述各协议对应的编号

#define XFRM_PROTO_AH51

#define XFRM_PROTO_COMP108

#define XFRM_PROTO_IPIP4

#define XFRM_PROTO_IPV641

#define XFRM_PROTO_ROUTINGIPPROTO_ROUTING

#define XFRM_PROTO_DSTOPTSIPPROTO_DSTOPTS


2.4.4.3 结构体定义

1、描述安全关联SA的结构体定义如下


struct xfrm_state {

struct net*xs_net;//网络命名空间结构

struct hlist_nodebysrc;//源地址hash

struct hlist_nodebyspi;//spi hash

struct xfrm_idid;//SASP关联的ID,即目的地址、SPI、协议三元组

struct xfrm_selectorsel;//SA选择子

u32genid;//SA标志ID,防止发生碰撞

struct xfrm_state_walkkm;//密钥管理结构

struct {

u32reqid;//序列号

u8mode;//工作模式

u8replay_window;//防重放窗口

u8aalgo, ealgo, calgo;//认证、加密、压缩算法ID

u8flags;//标志,防止溢出

u16family;//所使用协议

xfrm_address_tsaddr;//源地址,用于封装使用

intheader_len;//添加的协议头长度

inttrailer_len;//添加的协议尾长度

} props;

struct xfrm_lifetime_cfg lft;//SA生存时间配置

struct xfrm_algo_auth*aalg;//认证算法

struct xfrm_algo*ealg;//加密算法

struct xfrm_algo*calg;//压缩算法

struct xfrm_algo_aead*aead;//校验算法

struct xfrm_encap_tmpl*encap;//NAT封装信息

struct xfrm_state*tunnel;//IPIP通信处理的SA

struct xfrm_replay*repl;//重放检测结构

struct timer_listrtimer;//定时器

struct xfrm_mode*inner_mode;//工作模式

struct xfrm_sec_ctx*security;//安全上下文

void*data;//私有数据

};


2、具体协议簇下SA处理操作的结构体定义如下:


struct xfrm_state_afinfo {

unsigned intfamily;//协议簇

unsigned intproto;//协议

__be16eth_proto;

struct module*owner;//协议模块

const struct xfrm_type*type_map[IPPROTO_MAX];//存储协议结构的数组

struct xfrm_mode*mode_map[XFRM_MODE_MAX];//存储工作模式的数组

int(*init_flags)(struct xfrm_state *x);//初始化SA的标志

void(*init_tempsel)(struct xfrm_selector *sel,const struct flowi *fl);//初始化模板选择

void(*init_temprop)(struct xfrm_state *x,const struct xfrm_tmpl *tmpl,constxfrm_address_t *daddr,const xfrm_address_t *saddr);//初始化SAprop

int(*output)(struct sk_buff *skb);//发送数据时SA处理

int(*output_finish)(struct sk_buff *skb);//发送完成时SA的处理

};


3、描述IPsec协议的结构体定义如下:

struct xfrm_type {

char*description;//描述字符串

struct module*owner;//协议模块

u8proto;//协议

u8flags;//标志

int(*init_state)(struct xfrm_state *x);//初始化SA

void(*destructor)(struct xfrm_state *);//析构SA

int(*input)(struct xfrm_state *, struct sk_buff *skb);//数据包进入处理

int(*output)(struct xfrm_state *, struct sk_buff *pskb);//数据包发送处理

int(*reject)(struct xfrm_state *, struct sk_buff *,const struct flowi *);//拒绝数据包

int(*hdr_offset)(struct xfrm_state *, struct sk_buff *, u8 **);//获取头部偏移

u32(*get_mtu)(struct xfrm_state *, int size);//获取MTU

};





本文转载于微信公众号: Linux内核之旅(LinuxKernelTravel),更多微信文章请扫描关注公众号:

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部