一、源码目录(Directory layout)
二、源码分类(Implemetation taxonomy)
vpp数据平面分为四个不同的层:
-
基础架构层:包括vppinfra,vlib,svm和二进制api库。源码:/src/{vppinfra, vlib, svm, vlibapi, vlibmemory}
-
通用网络协议栈层:vnet。源码:/src/vnet
-
应用程序shell:vpp。源码:/src/vpp
-
日益丰富的数据平面插件。源码:/src/plugins
Vppinfra:
Vppinfra是一个基本的c-library服务集合,可以构建直接在裸机上运行的独立程序。它提供高性能动态数组,hash表,位图,高精度实时时钟支持,精细的日志记录和数据结构序列化。
Vectors
Vppinfra向量是无处不在的动态调整大小的数组,具有用户定义的“头”。许多vpppinfra数据结构(例如hash,堆,池)是具有各种不同头的向量。
内存布局如下所示: User header (optional, uword aligned) Alignment padding (if needed) Vector length in elements User's pointer -> Vector element 0 Vector element 1 ... Vector element N-1
如上所示,向量API处理指向向量第0个元素的指针。 如果指为空针则说明向量的有效长度为0。
为了避免内存分配器的分配失败,通常在保留内存分配的同时将向量的长度重置为零。通过vec_reset_length(v)宏将向量长度字段设置为零。
通常情况下不存在用户标头。用户头允许在vppinfra向量上构建其他数据结构。用户可以通过vec * _aligned宏指定数据元素的对齐方式。
向量元素可