原标题: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 要判断的结果。
函数返回值:返回错误地址。返回搜狐,查看更多
责任编辑: