Linux宏定义实现类成员函数,Linux加解密支持模块代码详细分析之核心文件分析之二api.c...

原标题:Linux加解密支持模块代码详细分析之核心文件分析之二api.c

2.4.2.文件二 api.c

2.4.2.1.文件描述

文件名称:api.c。

文件路径:linux-3.5.4/crypto/api.c。

该文件主要通过使用页向量(sactterlists)作为参数,并且直接按页面工作对算法进行操作。

涉及主要函数:__crypto_alg_lookup crypto_ctxsize __crypto_alloc_tfm crypto_alloc_base crypto_destroy crypto_has_alg。

2.4.2.2.主要变量及宏定义

api.c文件中涉及的变量信息如下表2-12。

表2-12 文件api.c中主要变量解释

变量名称变量类型变量说明

modulestruct module *变量包含在函数crypto_mod_put中,算法模块。

qstruct crypto_alg *变量包含在函数__crypto_alg_lookup中,指向结构体 crypto_alg 的算法。

bestint变量包含在函数__crypto_alg_lookup中,用于表达算法优先级。

exactint变量包含在函数__crypto_alg_lookup中,用于表达字符串比较结果,其值有-1、0、1。

larvalstruct crypto_larval *变量包含在函数crypto_larval_destroy中,一种算法。

timeoutlong变量包含在函数crypto_larval_wait中,等待完成的时间。

okint变量包含在函数crypto_probing_notify中,分组事件通知链表的返回值。

type_objstruct crypto_type *变量包含在函数crypto_init_opsy中,算法对象对应算法的类型。

tfm_sizeunsigned int变量包含在函数__crypto_alloc_tfm中,算法对象的大小。

tfmstruct crypto_tfm *变量包含在函数__crypto_alloc_tfm中,算法的内核空间地址。

2.4.2.3.结构体定义

文件涉及到的结构体在algapi.c文件中已经进行了说明,参见2.4.1.3。

2.4.2.4.外部函数

1. atomic_inc

函数原型:void atomic_inc(atomic_t *v);

函数功能:原子的给v加1。

函数参数:v atomic_t类型变量。

函数返回值: 无。

2. try_module_get

函数原型:bool try_module_get(struct module *module);

函数功能:获取模块是否成功,成功返回true,失败返回false。

函数参数:module 模块名称。

函数返回值:成功返回1,失败返回0。

3. crypto_alg_put

函数原型:static inline void crypto_alg_put(struct crypto_alg *alg);

函数功能:算法的释放函数,调用cra_destroy实现。

函数参数:alg 算法注册名。

函数返回值:无。

4. module_put

函数原型:void module_put(struct module *module);

函数功能:模块的释放。

函数参数:module 模块名称。

函数返回值:无。

5. list_for_each_entry

函数原型:list_for_each_entry(pos, head, member);

函数功能:链表的遍历并返回pos结果。

函数参数:pos 指向当前项 ;n 用于临时存储; head 要遍历的链表头;member 是数据结构定义中list_head成员的变量名。

函数返回值:无。

6. kzalloc

函数原型:static inline void *kzalloc(size_t size, gfp_t flags);

函数功能:分配内核空间并将空间设置为0。

函数参数:size 要分配的空间大小;flags 分配标志。

函数返回值:无。

7. init_completion

函数原型:static inline void init_completion(struct completion *x);

函数功能:初始化动态创建的completion结构体。

函数参数:x 要被初始化的结构体completion。

函数返回值:无。

8.down_write

函数原型:void __sched down_write(struct rw_semaphore *sem)

函数功能:写信号量的锁操作。

函数参数:sem 读写信号量。

函数返回值:无。

9. up_write

函数原型:void up_write(struct rw_semaphore *sem);

函数功能:写信号量的释放。

函数参数:sem 读写信号量。

函数返回值:无。

10. list_del

函数原型:static inline void list_del(struct list_head *entry);

函数功能:从链表中删除一个节点操作。

函数参数:entry 要删除的节点。

函数返回值:无。

11. complete_all

函数原型:void complete_all(struct completion *x);

函数功能:唤醒所有线程等待complete完成。

函数参数:x 结构completion的状态。

函数返回值:无。

12. wait_for_completion_interruptible_timeout

函数原型: long __sched wait_for_completion_interruptible_timeout(struct completion *x,unsigned long timeout);

函数功能:等待一个具体任务的发生或者任务的超时。函数参数:x 结构completion的状态;timeout jiffies 超时时间。

函数返回值:如果中断发生返回-ERESTARTSYS,超时则返回0,任务完成则返回正数。

13. down_read

函数原型:void __sched down_read(struct rw_semaphore *sem);

函数功能:锁定读锁。

函数参数:sem 读写信号量。

函数返回值:无。

14. up_read

函数原型:void up_read(struct rw_semaphore *sem);

函数功能:释放读锁。

函数参数:sem 读写信号量。

函数返回值:无。

15. blocking_notifier_call_chain

函数原型:int blocking_notifier_call_chain(struct blocking_notifier_head *nh,

unsigned long val, void *v);

函数功能:块操作回调函数,在上下文中使用,可以被阻塞。

函数参数:nh 指向分组通知链表的头;val 给通知函数传递为修改的内容;v 传递为修改的内容给通知函数。

函数返回值:函数调用成功返回0。

16. kzfree

函数原型:void kzfree(const void *p);

函数功能:函数中参数p指向空间设置为0的地方,此函数类似与kfree,但是空间要为0,如果p指向为空,则函数什么都不做。

函数参数:p 指向申请的空间。

函数返回值: 无。

17. IS_ERR

函数原型:static inline long __must_check IS_ERR(const void *ptr);

函数功能:内核判断参数是否出错,如果出错,可以调用PTR_ERR返回错误结果。

函数参数:ptr 要判断的结果。

函数返回值:返回错误地址。返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值