4. ODP 应用程序和报文流

数据面应用程序从根本上说涉及接收、检查、操作和传输数据包。 数据面的显著特点是这些应用程序主要关注ISO堆栈(L2和L3)的最底层,并且他们具有非常高的性能要求。 ODP旨在为这些应用程序提供便携式框架。

从最上层看,ODP应用程序是使用一个或多个ODP API的程序。由于ODP是一个编程框架,而不是编程环境, 所以,应用程序可以自由地使用其他非ODP API。

ODP应用程序的作用和运行方式各不相同,但总体来说具有如下特点:

  1. 它们被组织成一个或多个并行执行的线程。
  2. 这些线程使用各种同步机制来传达和协调其活动。
  3. 它们从一个或多个数据包I/O接口接收数据包。
  4. 他们检查,转换或以其他方式处理数据包。
  5. 它们将数据包传输到一个或多个数据包I/O接口。

ODP应用程序的顶层视图如下所示:

../_images/odp-app-overview.svg

ODP Application Packet Flow Overview

数据包到达并从由PktIO抽象表示的网络接口接收(RX)。 然后,它们直接转到由ODP线程轮询的队列,或者可以通过分类器Classification和排序,进入到代表各个流的队列。 接下来就可以通过调度器Scheduler将这些队列分派到应用程序线程。

线程,术语描述为可以调用各种ODP API来处理数据包内容。 对于输出处理,报文可以通过直接排队到PKTIO输出队列,或者可以在TX之前将其交给TM进行QoS处理。 注意,输出接口可以在loopback模式下工作,在这种情况下,发送给他们的数据包被重新回环到输入端进行“第二次”处理。 例如,传入的IPSec报文在解密之前无法正确分类,因此必须回环回来进行第二次处理。一旦解密,其实际内容可见,则可以将其分配到对应flow上。

需要注意的是,上述图表中唯一需要操作的是黄色部分。 这里显示的其他内容都由ODP提供,可供任何ODP应用程序使用。 这代表了数据面应用程序的“机械”,并且被构造为允许写入ODP API的应用程序可以在提供ODP实现的每个平台上进行移植和优化,而无需额外的工作。