这个函数是先获取接口 hw 结构,然后将接口的 output node 放在 interface output node 后面,这样在 interface output node 执行函数中就可以获取到下一个节点的索引,即接口 output node index。那么这个函数是什么时候执行的呢? 看宏定义的内容可以发现,这个宏定义的目的是为了在main函数执行之前,执行 vnm->hw_inter...
一帧报文依次通过不同的图形节点,直到它们被interface-output节点发送出去。 VPP图形节点的处理逻辑 按照网络功能一次处理一帧报文,有几个好处: 从软件工程的角度看,每一个图形节点是独立和自治的。 从性能的角度看,主要的好处是可以优化CPU指令缓存(i-cache)的使用。当前帧的第一个报文加载当前节点的指令到指令缓存...
比如:如果某报文校验失败,就被传送到error-drop节点;正常报文被传送到ip6-lookup节点。 一帧报文依次通过不同的图形节点,直到它们被interface-output节点发送出去。 第一步: 第二步: 第三步: 第四步: 按照网络功能一次处理一帧报文优势: 从软件工程的角度看,每一个图形节点是独立和自治的。 从性能的角度看,主...
Breadcrumbs vpp /src /vnet / interface_output.hTop File metadata and controls Code Blame 156 lines (141 loc) · 5 KB Raw /* * Copyright (c) 2015 Cisco and/or its affiliates. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in...
目前只有接口interface-tx节点中有使用,用于interface-output节点赋值一些私有信息给interface-tx节点有使用。在vnet_register_interface节点函数中对node节点的参数r.scalar_size = sizeof (vnet_hw_if_tx_frame_t)进行了赋值。没有过多研究,感兴趣的可以深入一下代码。 所以我们可以计算出scalar_size为0时,vlib_...
interface-output device-input l2-input l2-output 上述arc根据TCP/IP协议栈处理顺序划分,大的如L2/L3...
dpdk 发包逻辑相对复杂,dpdk 的发包并未直接在插件中实现专门的 output node,而是通过接口 tx_function 赋值,最终在 vpp 的发送流程中实现。在发送报文时,接口的 output node 和 tx node 会在 vnet_register_interface 注册接口时一同注册,其中 output node 的执行函数是 vnet_interface_output_node...
[0]="interface-output", }, }; clib_error_t* lb_plugin_init(vlib_main_t*vm){ return0; } VLIB_INIT_FUNCTION(lb_plugin_init); 实现load balancing算法(这里使用最简单的轮询算法): /* load balancing table */ typedefstruct{ u32 sw_if_index; ...
为了描述这些虚拟接口,vpp在hw_interface的基础上又封装了一层sw_interface来表示接口。sw_interface是整个接口层对上层软件的一个抽象,上层软件使用sw_interface索引用来表示具体操作的设备。VPP支持的物理网络设备类型一类设备表示使用相同硬件驱动的设备,比如dpdk类型的以太网设备,af_packet类型的虚拟以太网设备,netmap...
VLIB_INIT_FUNCTION (vnet_interface_init);interface_main的初始化在vnet_interface_init函数中进行。 vnet_interface_init这个函数除了对vnet_interface_main_t结构体的相关参数进行初始化之外,还有一个很重要的操作,就是对(vnet_device_class_t)device class的tx_function进行赋值。这个赋值决定了后续网卡发包的执行函...