1、确定把报文发送给第几个孩子节点 确定把报文送给哪个孩子节点处理,是由该 node 的业务逻辑决定的,通常有两种方式:一是通过解析报文的内容来决定,比如 ethernet-input 节点通过解析报文是 ipv4 还是 ipv6 报文把报文发送给ip4-input 或 ip6-input 去处理; 二是通过查找转发表来决定,比如 ip4-lookup 通过查找路...
基本的矢量数据包的处理流程很简单,首先由一组输入图节点产生矢量数据包,再由图节点调度函数将矢量数据包推向有向图,并根据需要将数据包细分,直到原始的矢量数据包已被完全处理,然后继续重复这个过程。 vpp的函数调用更像是一种各个节点之间相互连接,通过决定下一跳节点的路径在确定整个代码的执行路径。同样这种方式的...
vlib_main_or_worker_loop->dispatch_process->vlib_process_startup 通过执行dispatch_process完成最初对各process节点的一次调度,即初始化操作 vlib_process_startup中,clib_setjmp设置return_longjmp,此时返回值r为VLIB_PROCESS_RETURN_LONGJMP_RETURN 然后clib_calljmp在给定的栈空间上(给每个process节点在注册时分配...
一是通过解析报文的内容来决定,比如 ethernet-input 节点通过解析报文是 ipv4 还是 ipv6 报文把报文发送给ip4-input 或 ip6-input 去处理; 二是通过查找转发表来决定,比如 ip4-lookup 通过查找路由表来决定把报文发送给 ip4-arp 还是 ip4-rewrite 节点来处理。 2.找到该孩子节点对应的用于存放报文的结构 vlib_f...