日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

vpp之node节点分析一: dual类型节点

發布時間:2023/12/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vpp之node节点分析一: dual类型节点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

vpp中node節點是數據包的處理流程,數據包在不同節點之間流動進行處理

vpp所有的node節點無論里面的邏輯如何處理,轉發流程都分為兩種,主要是為了性能優化,本篇文章介紹第一種dual類型

首先創建一個dual類型的插件,名字為testdual,查看node.c文件

注:一般來說處理數據包的代碼文件名都是node.c,但是如果一個模塊功能過于復雜就會根據相應類型取名,例如ip4的處理

1.第一個知識點,當前node是如何確定數據包的下一個node節點的

這兩個要放在一起看

VLIB_REGISTER_NODE這個宏表示注冊 testdual這個節點

name表示該節點的名字,其中vpp會給該node分配一個node index作為標識,和名稱一一對應

type表示節點的類型,這個會在別的文章中分享,處理數據包的節點都是該類型

重點來了

n_next_nodes表示當前node節點的下一個節點有多少個,這個值就是上面枚舉類型的最后一個

next_nodx表示當前node節點下一個節點有哪些,在代碼中會變成char *next_nodes[] 數組,記錄下每一個節點的名字,其中數組下標對應上面的枚舉類型,具體代碼中使用的下面講解

2.第二個知識點,當前節點是如何處理數據包并控制轉發的

我把相關說明以注釋的形式放在代碼中

注: 該代碼是vpp處理數據的基礎,務必全部理解,基本上分析源碼障礙就少了很多

3.dual類型與qs類型的區別

dual類型適合當前node節點的轉發節點有很多個,同時在處理的過程中數據包會根據條件發送到不同的節點去

dual類型轉發數據包的流程

(1)調用vlib_get_next_frame獲取下一個節點的frame

(2)通過vlib_validate_buffer_enqueue_x系列函數(宏)轉發到指定node

(3)通過vlib_put_next_frame函數設置frame狀態等待vpp調度

如果想搞懂區別,必須理解vlib_validate_buffer_enqueue_x在做什么

為了方便理解,這里以vlib_validate_buffer_enqueue_x1為例

?問題就在于為什么要先調用一次vlib_put_next_frame

需要分析一下vlib_put_next_frame函數

原因就是前面已經通過to_next把數據包存放到next_index指向的node,但是實際上數據包需要轉發到next0指向的node,所以通過?vlib_put_next_frame重置一下next_index指向node的數據,證據就是調用vlib_put_next_frame函數時傳入數據包個數是?n_left_to_next + 1,由于程序是在最后調用vlib_put_next_frame把當前節點收到的所有數據把統一發走,所以n_left_to_next + 1一定等于VLIB_FRAME_SIZE

接著循環結束,把這一個數據包轉發到next_index,但是此時的next_index已經變成了next0

繼續分析,x2和x4又在做什么呢

2個包和4個包情況就復雜了,其中如果有一個包不跟next_index表示的node一致,就需要把數據包發走

這里以x4為例

?通過vlib_set_next_frame_buffer函數

繼續通過vlib_set_next_frame函數

這里可以看出把數據包發送到next0指向的node

關于qs的處理放在下篇文章講解

總結

以上是生活随笔為你收集整理的vpp之node节点分析一: dual类型节点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。