[dev][dpdk][crypto] dpdk加解密设备与IPSEC

概述

分三部分,加解密框架(crypto framework),加解密设备(crypto dev),安全协议(Security Framework)

×  API,设计思路等,都在加解密框架里:见文档:http://doc.dpdk.org/guides-18.11/prog_guide/cryptodev_lib.html

×  设备层的事情,加解密设备的分类,调度,主备等,见文档:http://doc.dpdk.org/guides-18.11/cryptodevs/index.html

×  ESP,PDCP等网络加密协议相关的事情,主要功能是整合NIC pmd和Crypto pmd,见文档:http://doc.dpdk.org/guides-18.11/prog_guide/rte_security.html

 

另外还有一个追加的部分,ipsec (rte_ipsec)

*  这一部分主要是对前面三个部分的整合封装调用,用来专门处理ipsec报文。见文档:http://doc.dpdk.org/guides/prog_guide/ipsec_lib.html

 

画个图:

 

 

如果,以上三个文档,你都读完了,那么请不要再往下读了。内容重复。且本人懒惰,多以摘要为主,写的也不好  :)

 

一般编程模型

画了一张图,还没完全整理好,后续有可能会再更新,也有可能不更新了。

是参考dpdk的这个例子里的流程画的:http://doc.dpdk.org/guides/sample_app_ug/ipsec_secgw.html

 

初始化加密设备的一般流程。

 

 

设备就绪后的一般使用流程。(需要关注的是:在分析rte_ipsec的源码过程中,并没有发现对API rte_crypto_op_attach_sym_session的调用。奇怪。。。)

    // TODO init dpdk crypto things.// 1. init sa->xforms  like function sa_add_rules()// 2. init two parameter ipsec_xform/crypto_xform// 2. ipsec_sa_init()//    2.1 rte_ipsec_sa_init()// 3. create_session//    3.1 rte_security_session_create()//    3.2 rte_cryptodev_sym_session_create()//    3.3 rte_cryptodev_sym_session_init()// 3.4 rte_ipsec_session_prepare()//    3.4.1 sa->ips->pkt_func = ipsec_sa_pkt_func_select()// 3.5 rte_ipsec_pkt_process()//    3.5.1 sa->ips->pkt_func.process()// 3.6 rte_ipsec_pkt_crypto_prepare()//    3.6.1 sa->ips->pkt_func.prepare()// 7 rte_cryptodev_enqueue_burst()// 8.rte_cryptodev_dequeue_burst()// 9 rte_ipsec_pkt_crypto_group()// 10 rte_ipsec_pkt_process()//    3.5.1 sa->ips->pkt_func.process()// outbound// 4 rte_security_attach_session()// 5 rte_crypto_op_attach_sym_session()// 6 rte_security_set_pkt_metadata()// 7.rte_cryptodev_enqueue_burst()// 8 rte_cryptodev_dequeue_burst()

 

 

 

第二部分,设备(crypto dev)

所有的加解密设备大概分为以下几种:openssl,null,硬件架构相关的设备。

null为纯软件的最小实现,可以用来调试等。

硬件相关的主要包括,Intel,arm,NXP,AMD,QAT卡等。

还有一种,基于VIRTIO的PMD设备。

不同的设备,所支持的加解密算法也各有不同,有一个详细的对比列表,见:

http://doc.dpdk.org/guides-18.11/cryptodevs/overview.html

设备调度

在各设备的上层,还有一个调度设备,用于管理和协调多个加解密设备直接的数据流。叫做 cryptodev scheduler PMD

http://doc.dpdk.org/guides-18.11/cryptodevs/scheduler.html

 

接口API

加解密设备的调度API(schduler)

http://doc.dpdk.org/api-18.11/rte__cryptodev__scheduler_8h.html

 

加解密设备的使用API (cryptodev)

http://doc.dpdk.org/api-18.11/rte__cryptodev_8h.html

 

第一部分  框架(crypto framework)

架构设计文档:http://doc.dpdk.org/guides-18.11/prog_guide/cryptodev_lib.html

设计理念

The cryptodev library follows the same basic principles as those used in DPDKs Ethernet Device framework. 
The Crypto framework provides a generic Crypto device framework which supports both physical (hardware)
and virtual (software) Crypto devices as well as a generic Crypto API which allows Crypto devices to be
managed and configured and supports Crypto operations to be provisioned on Crypto poll mode driver.

设备初始化方法

A。 初始化设备

实体设备:与PCI网卡相同。

虚拟设备:1. 可以使用 --vdev参数在dpdk程序启动时使用。2. 在运行时使用api:

rte_vdev_init("crypto_aesni_mb","max_nb_queue_pairs=2,socket_id=0")

 

B。配置设备

设备识别:用Id或name

设备配置:使用api:

int rte_cryptodev_configure(uint8_t dev_id,struct rte_cryptodev_config *config)struct rte_cryptodev_config {int socket_id;/**< Socket to allocate resources on */uint16_t nb_queue_pairs;/*


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部